Java Jena TDB:嵌套事务

Java Jena TDB:嵌套事务,java,transactions,jena,triplestore,Java,Transactions,Jena,Triplestore,我想重写我当前的代码以利用事务。但是,根据Jena文档()的规定,嵌套事务不受支持 比方说,我想从数据库中查询一些数据,并为找到的每个资源添加一个rdfs:label。我是否必须像下面的代码那样严格区分读写代码,或者是否有更有效的方法来实现这个示例 Dataset dataset = ...; dataset.begin(ReadWrite.READ); ArrayList<Resource> res = new ArrayList<Resource>(); try

我想重写我当前的代码以利用事务。但是,根据Jena文档()的规定,嵌套事务不受支持

比方说,我想从数据库中查询一些数据,并为找到的每个资源添加一个rdfs:label。我是否必须像下面的代码那样严格区分读写代码,或者是否有更有效的方法来实现这个示例

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(); }
数据集=。。。; dataset.begin(ReadWrite.READ); ArrayList res=新的ArrayList(); 试一试{ QueryExecution qe=QueryExecutionFactory.create(“选择?x WHERE{?x a.}”,数据集); ResultSet rs=qe.execSelect(); 尝试 { while(rs.hasNext()) { querysolutions=rs.nextSolution(); RDFNode节点=s.get(“x”); if(node.isResource)res.add(node.asResource()); } }最后{qe.close();} }最后{dataset.end();} dataset.begin(ReadWrite.WRITE); 试一试{ 属性标签=model.getProperty(“http://www.w3.org/2000/01/rdf-schema#label"); 用于(资源r:res) { r、 addProperty(标签,“文本”); } 提交(); }最后{dataset.end();}
我已经在上发布了这个问题,但还没有收到任何答案,所以我希望这里的人能帮助我

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

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