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

Sql server 使用CFTRANSACTION和ORM EntityLoad设置隔离级别,sql-server,orm,coldfusion,Sql Server,Orm,Coldfusion,我正在使用ColdFusion 9和MS SQL Server 我正在尝试使用: <cftransaction isolation="read_uncommitted"> <cfset X = EntityLoad('table',row_id,true)> </cftransaction> 如果将EntityLoad替换为一个简单的cfquery调用,我会得到以下结果: 09:24:30.164)>> Connection[6].setT

我正在使用ColdFusion 9和MS SQL Server

我正在尝试使用:

<cftransaction isolation="read_uncommitted">
   <cfset X = EntityLoad('table',row_id,true)>
</cftransaction>
如果将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设置隔离级别的更好方法是什么?

我在ColdBox博客上找到了Curt Gratz关于这一点的文章:通读这篇文章,它有一些优点。但基本上Curt发现可以创建一个自定义hibernate配置文件来指定各种设置

从那篇博文:

因此,由于更改隔离级别不是ORM设置中可用的设置之一,因此我必须创建一个自定义hibernate配置文件

起初我认为这会很困难,因为我认为必须插入hibernate的Coldfusion实现已经使用的所有“标准”设置,但事实证明,您只需要设置任何希望使用的附加属性。下面是可用的hibernate配置选项列表

所以,关于一些代码

这是我新创建的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>
资料来源:

然后在我的application.cfc中设置

<cfset this.ormsettings = {dialect="MicrosoftSQLServer", ormconfig="hibernate.xml"}>  

现在,请确保您的hibernate.xml文件位于webroot之外的某个位置,以保护它不被任何邪恶的眼睛读取

好了,希望这对你有帮助,因为我花了很多时间才弄明白

此信息完全归功于Curt Gratz。

请在此处重新发布,以防将来该页面被删除。

谢谢。我忘了提到,我实际上也发现了这一点,并将其包含在我的代码中。但是通过查看日志和使用SQL分析器,我发现它不起作用。然后,查看Adobe的文档(),在ormconfig属性上,他们说“Hibernate配置XML文件中的连接信息被忽略,因为ColdFusion使用自己的连接池。”。不管怎样,那是一次很好的尝试,很有趣。他和你一样使用ColdFusion 9。您是否记得Application.cfc中的
this.ormsettings
,以及您在进行更改后是否重新启动了ColdFusion?是的,我已使用this.ormsettings在文件开头和“OnApplicationStart”方法中添加了Application.cfc,并在,事实上,在我试着让它工作的时候,已经有好几次了。它没有改变日志。过了一会儿,我注意到adobe文档中的这一行,这可能是它不起作用的原因。
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
<cfset this.ormsettings = {dialect="MicrosoftSQLServer", ormconfig="hibernate.xml"}>