Java 在torque中设置事务隔离级别
使用torque时,如何为特定事务设置事务隔离级别 我的问题可能是我使用的org.apache.torque.util.Transaction类如下:Java 在torque中设置事务隔离级别,java,jdbc,apache-torque,Java,Jdbc,Apache Torque,使用torque时,如何为特定事务设置事务隔离级别 我的问题可能是我使用的org.apache.torque.util.Transaction类如下: Connection con=Transaction.begin(); // Use connection con.commit(); Con确实有一个setTransactionIsolation方法,但该方法的文档说明: 如果在事务期间调用此方法,则结果是实现定义的 这似乎很奇怪,因为获取连接对象的唯一方法是开始一个事务。因此,我唯一可以调
Connection con=Transaction.begin();
// Use connection
con.commit();
Con确实有一个setTransactionIsolation方法,但该方法的文档说明:
如果在事务期间调用此方法,则结果是实现定义的
这似乎很奇怪,因为获取连接对象的唯一方法是开始一个事务。因此,我唯一可以调用该方法的时间是在事务期间。只要在通过
connection con=transaction.begin()获取连接后直接使用con.setTransactionIsolation(…)
代码>。此时事务还没有在JDBC意义上启动。确保稍后调用con.commit()
或con.rollback()
,在事务进行时通过con.close()
将连接释放回连接池是未定义的行为
参考资料:那么交易什么时候开始?当我进行第一次选择/更新时?通常是。来自JDBC规范:“何时启动新事务是由JDBC驱动程序或底层数据源隐式做出的决定。尽管有些数据源实现显式的“开始事务”语句,则没有JDBC API可执行此操作。通常,当当前SQL语句需要一个新事务且没有事务已存在时,会启动新事务。SQL:2003还指定给定SQL语句是否需要事务。”顺便说一句,由于这是一个池连接,请不要忘记在commit()
或rollback()
之后和con.close()之前恢复原始隔离级别,谢谢。我没有想到有必要将其恢复到默认水平。