如果我在Java代码中进行这样的调用:
connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
是在代码中强制执行的,是DBMS表/行级锁,还是依赖于JDBC驱动程序实现的任何一种?
谢谢!
答案 0 :(得分:2)
隔离级别由数据库引擎强制执行,而不是应用程序代码。
如果您有兴趣,这是一个很好的资源。 Isolation Levels
答案 1 :(得分:0)
您正在使用依赖于底层RDBMS的底层JDBC驱动程序实现的JDBC API:
JDBC驱动程序可能不支持所有事务隔离级别。如果驱动程序不支持setTransactionIsolation调用中指定的隔离级别,则驱动程序可以替换更高,更严格的事务隔离级别。如果驱动程序无法替换更高的事务级别,则会抛出SQLException。使用DatabaseMetaData.supportsTransactionIsolationLevel方法确定驱动程序是否支持给定级别。
如果您使用的是JTA API,那么您将依赖于履行JCA合同的底层实施。在关系数据库资源的情况下,合同也将由RDBMS实现,但对于另一种类型的资源(例如JMS),肯定可以不同地实现(例如,使用代码)。