在同一cftransaction
標記中使用cfquery
和ORM操作混合原始查詢安全嗎?在同一個cftransaction中混合原始查詢和ORM操作
<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。從我的理解,這可能會發生,因爲休眠會話只會在關閉cftransaction
時纔會被刷新,這是否正確?
我注意到,因爲另一個問題至極,我會問另一個問題。但基本上,我必須在運行ORM語句之前禁用特定表上的觸發器,否則將導致StaleStateException
。
具有相同cftransaction
內DISABLE TRIGGER
和ENABLE TRIGGER
語句之間的ORM操作時,並沒有解決問題,因爲ENABLE TRIGGER
的ORM查詢之前跑。但是,使用以下時,它的工作原理:
<cfquery datasource="test">
DISABLE TRIGGER ALL ON Test;
</cfquery>
<cftransaction>
<!--- ORM CODE --->
<!--- Other cfquery --->
</cftransaction>
<cfquery datasource="test">
ENABLE TRIGGER ALL ON Test;
</cfquery>
我也嘗試了ORM語句後立即使用ormFlush()
,但它並沒有奏效。有沒有辦法在同一個cftransaction
中混合原始查詢和ORM語句,並讓語句順序運行?也許我完全誤解了這個問題,但我現在很困惑。
我再次仔細看看'ormFlush()'。我相信這是行得通的,我之前使用它沒有任何問題。 – Henry 2013-05-03 18:55:19
@亨利,我必須等到週一才能再次檢查。如果你安裝了CF,你可以通過在表中插入3行(沒有orm,orm,沒有orm)來確認你的聲明並檢查結果嗎?謝謝! – plalx 2013-05-03 23:30:28