我正在使用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设置隔离级别的更好方法?
答案 0 :(得分:1)
我在Cump Gratz的ColdBox博客上发现了一篇关于此事的帖子:Coldfusion ORM - Transaction Isolation Level...阅读其中的全文,它有一些好处。但基本上Curt发现你可以创建一个自定义的hibernate配置文件来指定各种设置。
从博客文章:
因此,由于更改隔离级别不是ormsettings中可用的设置之一,因此我必须创建一个自定义的hibernate配置文件。
起初我认为这很难,因为我认为我必须插入所有&#34;标准&#34;设置hibernate的Coldfusion实现已经在使用,但事实证明,你只需要设置你想要使用的任何其他属性。以下是可用的hibernate配置选项列表。
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
所以,对某些代码......
这是我新创建的hibernate配置文件。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- a SessionFactory instance listed as /jndi/name --> <session-factory name="java:hibernate/SessionFactory"> <!-- properties --> <property name="connection.isolation">1</property> </session-factory> </hibernate-configuration>
注意配置文件中的一件事。
<property name="connection.isolation">1</property>
。为什么你要问...以下是每个可用隔离级别的int值。
java.sql.Connection public static final int TRANSACTION_NONE 0 public static final int TRANSACTION_READ_COMMITTED 2 public static final int TRANSACTION_READ_UNCOMMITTED 1 public static final int TRANSACTION_REPEATABLE_READ 4 public static final int TRANSACTION_SERIALIZABLE 8
然后在我的application.cfc中设置
<cfset this.ormsettings = {dialect="MicrosoftSQLServer", ormconfig="hibernate.xml"}>
现在,请确保在webroot之外的某处有hibernate.xml文件,以防止被任何邪恶的眼睛读取。
你去了,希望这对你有所帮助,因为我花了很多时间去挖掘它
Curt Gratz对此信息完全赞同。
如果将来删除该页面,请重新发布此处。