首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CFTRANSACTION和ORM EntityLoad设置隔离级别

使用CFTRANSACTION和ORM EntityLoad设置隔离级别
EN

Stack Overflow用户
提问于 2015-10-20 18:19:39
回答 1查看 322关注 0票数 4

我正在使用ColdFusion 9和MS SQL Server。

我正在尝试使用:

代码语言:javascript
复制
<cftransaction isolation="read_uncommitted">
   <cfset X = EntityLoad('table',row_id,true)>
</cftransaction>

更改某些事务中的隔离级别

但是在查看来自数据源的日志时,我得到了以下结果:

代码语言:javascript
复制
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调用,我会得到如下结果:

代码语言:javascript
复制
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设置隔离级别的更好方法是什么?

EN

回答 1

Stack Overflow用户

发布于 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。

在这里重新张贴,以防该页面在未来被删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33234024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档