看來,Hibernate的EntityManager的find
方法在以下兩種情況下表現不同:EM查找行爲不同,如果實體同一事務中刪除
案例1 - 交易開始前實體不存在於數據庫中。在交易中,實體的find
返回null
。
案例2 - 實體在事務之前存在於數據庫中。在交易中,實體爲remove
'd,則相同密鑰的find
引發EntityNotFoundException
。
這是預期的行爲?我需要在find
之前做一個flush
,它的行爲是否相同?
看來,Hibernate的EntityManager的find
方法在以下兩種情況下表現不同:EM查找行爲不同,如果實體同一事務中刪除
案例1 - 交易開始前實體不存在於數據庫中。在交易中,實體的find
返回null
。
案例2 - 實體在事務之前存在於數據庫中。在交易中,實體爲remove
'd,則相同密鑰的find
引發EntityNotFoundException
。
這是預期的行爲?我需要在find
之前做一個flush
,它的行爲是否相同?
當未找到實體時,find
方法在EntityManager
中拋出EntityNotFoundException
是意外的。 Documentation是很清楚的:
返回:
找到的實體實例或NULL,如果實體不存在
此bug已被報道HHH-7861。這是固定在4.1.10,它還沒有發佈。
OK,回答我的問題的第二部分,它似乎在案件2 remove
和find
之間的flush
使其行爲相同情況1.也就是說,find
剛剛返回null
未拋出異常(這是我們想要的,因爲異常觸發了回滾)。
答案點將發送給任何人誰可以告訴我爲什麼find
應該有不同的行爲。
謝謝你。在某些時候我們會升級,這對我們來說不再是一個問題。 – DuncanKinnear