我正在使用ColdFusion 9和MS SQL Server。
我正在尝试使用:
<cftransaction isolation="read_uncommitted">
<cfset X = EntityLoad('table',row_id,true)>
</cftransaction>更改某些事务中的隔离级别
但是在查看来自数据源的日志时,我得到了以下结果:
09:20:32.688)>> Connection[6].prepareStatement(String sql)
09:20:32.688)>> sql = select ..... _ID=?
09:20:32.688)>> OK (PreparedStatement[871])
09:20:32.689)>> PreparedStatement[871].executeQuery()
09:20:33.594)>> OK (ResultSet[989])
09:20:33.606)>> Connection[6].setTransactionIsolation(int level)
09:20:33.606)>> level = 1
09:20:33.962)>> OK
09:20:34.141)>> Connection[6].setTransactionIsolation(int level)
09:20:34.141)>> level = 2
09:20:34.501)>> OK如果将EntityLoad替换为一个简单的cfquery调用,我会得到如下结果:
09:24:30.164)>> Connection[6].setTransactionIsolation(int level)
09:24:30.164)>> level = 1
09:24:30.519)>> OK
09:24:30.519)>> Statement[37].execute(String sql, int autoGeneratedKeys)
09:24:30.519)>> sql = select ...
09:24:30.519)>> autoGeneratedKeys = 1
09:24:30.699)>> OK (true)
09:24:30.879)>> Connection[6].setTransactionIsolation(int level)
09:24:30.879)>> level = 2
09:24:31.234)>> OK因此,当我使用ORM的EntityLoad时,隔离级别似乎没有正确设置。
有人知道为什么吗?使用ORM设置隔离级别的更好方法是什么?
发布于 2015-10-20 21:05:47
我在ColdBox博客上发现了Curt Gratz的一篇文章:Coldfusion ORM - Transaction Isolation Level...完整地阅读了这篇文章,它有一些好的观点。但是基本上Curt发现你可以创建一个自定义的hibernate配置文件来指定各种设置。
从那篇博文中:
所以,因为更改隔离级别不是ormsettings中可用的设置之一,所以我必须创建一个自定义的hibernate配置文件。
起初,我认为这会很困难,因为我认为我必须插入hibernate的Coldfusion实现已经在使用的所有“标准”设置,但事实证明,您只需设置您希望使用的任何其他属性。下面是可用的hibernate配置选项列表。
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
所以,让我们来看一些代码。
这是我新创建的hibernate配置文件。注意配置文件中的一件事。<property name="connection.isolation">1</property>。为什么你会问...
下面是每个可用的隔离级别的int值。
java.sql.Connection public static final TRANSACTION_NONE 0 public static final TRANSACTION_READ_COMMITTED 2 public static final int TRANSACTION_READ_UNCOMMITTED 1 public static final TRANSACTION_REPEATABLE_READ 4 public static final TRANSACTION_SERIALIZABLE 8
来源:http://java.sun.com/j2se/1.5.0/docs/api/constant-values.html#java.sql.Connection.TRANSACTION_READ_COMMITTED
然后在我的application.cfc中设置
现在,请确保您将hibernate.xml文件放在webroot之外的某个位置,以保护它不被任何恶意的眼睛读取。
这就对了,希望这对你有帮助,因为我花了很长时间才弄明白。
这一信息完全归功于Curt Gratz。
在这里重新张贴,以防该页面在未来被删除。
https://stackoverflow.com/questions/33234024
复制相似问题