gpt4 book ai didi

java - 耶拿 TDB : Nested Transactions

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:57 26 4
gpt4 key购买 nike

我想重写我当前的代码以使用交易。但是,根据 Jena 文档 (http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html),不支持嵌套事务。

比方说,我想从数据库中查询一些数据并为找到的每个资源添加一个 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(); }

我已经在 semanticweb.com 上发布了这个问题,但还没有收到任何答复,所以我希望这里有人能帮助我。

最佳答案

TDB 确实不支持嵌套事务,但是您可以在 WRITE 事务中进行任意多次读取。因此,启动 ReadWrite.WRITE 事务并在那里进行所有处理。无需嵌套事务即可完成您想要执行的操作。

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

关于java - 耶拿 TDB : Nested Transactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com