当我在代码中设置事务隔离级别时,是在代码中还是在DBMS中强制执行?

时间:2016-12-20 13:05:16

标签: java database hibernate isolation-level

如果我在Java代码中进行这样的调用:

  

connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

是在代码中强制执行的,是DBMS表/行级锁,还是依赖于JDBC驱动程序实现的任何一种?

谢谢!

2 个答案:

答案 0 :(得分:2)

隔离级别由数据库引擎强制执行,而不是应用程序代码。

如果您有兴趣,这是一个很好的资源。 Isolation Levels

答案 1 :(得分:0)

您正在使用依赖于底层RDBMS的底层JDBC驱动程序实现的JDBC API:

  

JDBC驱动程序可能不支持所有事务隔离级别。如果驱动程序不支持setTransactionIsolation调用中指定的隔离级别,则驱动程序可以替换更高,更严格的事务隔离级别。如果驱动程序无法替换更高的事务级别,则会抛出SQLException。使用DatabaseMetaData.supportsTransactionIsolationLevel方法确定驱动程序是否支持给定级别。

如果您使用的是JTA API,那么您将依赖于履行JCA合同的底层实施。在关系数据库资源的情况下,合同也将由RDBMS实现,但对于另一种类型的资源(例如JMS),肯定可以不同地实现(例如,使用代码)。