2011-05-02 18 views
2

我試圖使用本機查詢的呼叫從實體管理器這樣

如何設置「非鏈式事務模式」,從實體管理器

String command = "..."//my stored procedure call command 
Query q = getEntityManager().createNativeQuery(command); 

調用存儲過程但是當我運行它,我得到了下面的消息:

異常,程序...可以運行 僅在非鏈式事務模式...

我知道如果我有一個連接對象,我可以設置con.setAutoComit(true)來使這項工作。 但我的問題是:因爲我有一個實體管理器對象,我可以從實體管理器對象以某種方式設置?我想要容器來管理所有數據庫資源...

我正在使用EclipseLink。

謝謝。

再一個注意:我沒有對數據庫端的控制,所以我不能去改變交易模式爲「任何」。

回答

0

我找到了解決辦法:

getEntityManager().createNativeQuery("set chained off").executeUpdate(); 
1

您使用的是什麼數據庫/ JDBC驅動程序? 您使用的是Sybase JConnect嗎?我認爲它存在一些存儲過程調用的問題。

如果您無法解決數據庫/ drvier上的問題,那麼EclipseLink會爲此提供一個選項。

使用SessionCustomizer您可以設置,

session.getLogin().handleTransactionsManuallyForSybaseJConnect(); 

這是否具有的EclipseLink交易的控制只會工作,不會與JTA。