2012-02-21 85 views
1

我正在使用EntityManager將數據保存到我的數據庫中。什麼時候EntityManager的flush()方法返回?

public void save(X x){ 
    entityManager.persist(x); 
    entityManager.flush(); 
    triggerDataChange(); 
} 

沖洗數據後我調用triggerDataChange()方法來將消息發送到依賴於新寫入數據的外部組件。

問題:我可以依賴於在之後返回的刷新方法,數據是否已成功寫入數據庫?

感謝您的幫助。

+0

是的,刷新將更改提交給數據庫。 (但它仍然可以回滾。) – 2012-02-21 10:07:52

+0

順便說一句:如果您使用休眠,請查看可能的刷新模式:http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/FlushMode.html – 2012-02-21 10:10:16

+0

我認爲當他說「將更改提交給數據庫」時,他的意思是「不提交對數據庫的更改」8 =}。你的其他應用程序將不得不從數據庫讀取未提交的數據,這是不常見的事情。真的,你可能想要的是提交數據(即完成交易),然後調用你的外部系統。否則,外部系統可能會根據可能回滾的數據做出決定。 – davidfrancis 2012-02-21 11:22:02

回答

1

您的交易是相同的,所以即使交易回滾它也會完全回滾。 Flush不會提交該事務,因爲它仍然可以回滾。所以在你的實現中,無論你在做什麼都很好。

相關問題