2017-10-19 153 views
0

我想刷新存儲在當前事務中的所有實體到數據庫(不通過commit提交當前事務)。JPA EntityTransaction flush

在這樣做之前,我是否需要檢查事務是否處於活動狀態?

if (this.entityTransaction.isActive()) 
    { 
     this.entityManager.flush(); 
    } 

謝謝

+0

如果由於未知原因而未進行事務處理,並且正在進行將要丟失的更改,那麼不應該拋出異常嗎? – Chris

+0

@Chris你先生...有一點。但是「isActive」真的表明了什麼?我認爲它就像「系統中存在數據」 - >將其刷新到數據庫。 –

+0

不,isActive只是意味着有一筆交易已經開始。它沒有說明持久化單元中的內容或已做出的更改。 Flush將確定是否有更改並只推送這些更改,但只應在頭腦中有目標時調用,比如需要強制語句到數據庫以便捕獲代碼中的樂觀鎖或約束問題,而不是等待直到交易提交。 – Chris

回答

0

根據該方法的Javadoc的EclipseLink的的EntityManager沖洗

https://www.eclipse.org/eclipselink/api/2.6/javax/persistence/EntityManager.html#flush()

無效的flush() 同步持久化上下文到底層數據庫。 拋出: TransactionRequiredException - 如果沒有交易,或者如果實體管理器尚未被加入到交易 的PersistenceException - 如果刷新失敗

所以,是的,它看起來像你需要檢查,其他的方法你可能會得到類型爲「TransactionRequiredException」的異常