加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Jena TDB:嵌套事务

发布时间:2020-12-15 02:33:17 所属栏目:Java 来源:网络整理
导读:我想重写当前使用事务的代码.但是,根据Jena文档( http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html),不支持嵌套事务. 比方说,我想从数据库中查询一些数据,并为找到的每个资源添加一个rdfs:标签.我是否必须严格地按照以下代码分别
我想重写当前使用事务的代码.但是,根据Jena文档( http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html),不支持嵌套事务.

比方说,我想从数据库中查询一些数据,并为找到的每个资源添加一个rdfs:标签.我是否必须严格地按照以下代码分别阅读和编写代码,或者是否有更有效的方法来实现此示例?

Dataset dataset = ...; 
dataset.begin(ReadWrite.READ);

ArrayList<Resource> res = new ArrayList<Resource>();

try{
    QueryExecution qe = QueryExecutionFactory.create("SELECT ?x WHERE { ?x a <Whatever> . }",dataset); 
    ResultSet rs = qe.execSelect();

    try
    {
        while(rs.hasNext())
        {
            QuerySolution s = rs.nextSolution();
            RDFNode node = s.get("x"); 
            if(node.isResource) res.add(node.asResource()); 
        }

    }finally{ qe.close(); }

}finally{ dataset.end(); }

dataset.begin(ReadWrite.WRITE); 
try{
    Property label = model.getProperty("http://www.w3.org/2000/01/rdf-schema#label"); 
    for(Resource r : res)
    {
        r.addProperty(label,"text"); 
    }
    dataset.commit();

}finally{ dataset.end(); }

我已经在semanticweb.com发布了这个问题,但没有收到任何答案,所以我希望有人可以帮助我.

解决方法

确实,TDB不支持嵌套事务,但是您可以在WRITE事务中执行任意数量的读取操作.因此,启动ReadWrite.WRITE事务并执行所有处理.不需要嵌套的事务来做你想做的事情.

有关TDB交易支持的更多信息,请查看此处的官方文档:

> http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读