gpt4 book ai didi

java - 事务内的 JDO 查询 : yes or no?

转载 作者:行者123 更新时间:2023-12-02 05:45:34 25 4
gpt4 key购买 nike

我在查询数据库时一直使用事务,但最近我想知道为什么。

在“只读”查询上使用/不使用事务有哪些优点/缺点?

交易:

public int count() {

PersistenceManager pm=pmf.getPersistenceManager();
JDOTransaction tx=(JDOTransaction)pm.currentTransaction();

try{
tx.begin();
Query query=pm.newQuery(class);
query.setResult("count(this)");
Long count=(Long)query.execute();
query.closeAll();
tx.commit();

return count.intValue();

}finally{
if (tx.isActive()) tx.rollback();
pm.close();
}
}

非事务性:

public int count() {

PersistenceManager pm=pmf.getPersistenceManager();

try{
Query query=pm.newQuery(class);
query.setResult("count(this)");
Long count=(Long)query.execute();
query.closeAll();

return count.intValue();

}finally{
pm.close();
}
}

令我困惑的是,例如Datanucleus JDO 实现。如果事务默认不锁定对象,那么这样的事务有什么好处?

来自文档:JDOQL 允许控制查询找到的对象是否在该事务期间被锁定,以便其他事务无法同时更新它们:http://www.datanucleus.org/products/accessplatform_2_1/jdo/jdoql.html

最佳答案

这要看情况。如果您只有原子读取,则可能不需要它们。

但是,如果您想读取多个值,可能来自不同的表,选择可能取决于第一个查询的结果,事务可能会帮助您:您可能不希望在执行只读查询时数据库发生更改。事务可以提供隔离性,比如保证数据在事务过程中不发生改变。

还要提一下缺点:事务会影响性能。

关于java - 事务内的 JDO 查询 : yes or no?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100215/

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