cfquery
在同一个标签中混合使用原始查询和 ORM 操作是否安全cftransaction
?
<cftransaction>
<cfquery datasource="test">...</cfqueyr> <!--- A --->
<cfset var e = entityLoadByPK('SomeEntity', someId)> <!--- B --->
<cfset e.setSomeProperty('test')> <!--- C --->
<cfquery datasource="test">...</cfquery> <!--- D --->
</cftransaction>
通过查看 SQL 探查器,查询似乎不会按顺序执行,它们按以下顺序出现在探查器中:A、B、D、C。据我了解,这可能是因为休眠session 只有在到达 close 时才会被刷新cftransaction
,对吗?
我注意到由于另一个问题,我将在另一个问题中问一个。但基本上,我必须在运行 ORM 语句之前禁用特定表上的触发器,否则会导致StaleStateException
.
DISABLE TRIGGER
当在同一个和ENABLE TRIGGER
语句之间进行 ORM 操作时cftransaction
,它并没有解决问题,因为在ORM 查询之前ENABLE TRIGGER
运行。但是,当使用以下内容时,它可以工作:
<cfquery datasource="test">
DISABLE TRIGGER ALL ON Test;
</cfquery>
<cftransaction>
<!--- ORM CODE --->
<!--- Other cfquery --->
</cftransaction>
<cfquery datasource="test">
ENABLE TRIGGER ALL ON Test;
</cfquery>
我也尝试ormFlush()
在 ORM 语句之后立即使用,但没有奏效。有没有办法在同一个中混合原始查询和 ORM 语句cftransaction
并让语句按顺序运行?也许我完全误解了这个问题,但我现在很困惑。