2013-01-16 22 views
0

看來,Hibernate的EntityManager的find方法在以下兩種情況下表現不同:EM查找行爲不同,如果實體同一事務中刪除

案例1 - 交易開始前實體不存在於數據庫中。在交易中,實體的find返回null

案例2 - 實體在事務之前存在於數據庫中。在交易中,實體爲remove'd,則相同密鑰的find引發EntityNotFoundException

這是預期的行爲?我需要在find之前做一個flush,它的行爲是否相同?

回答

1

當未找到實體時,find方法在EntityManager中拋出EntityNotFoundException是意外的。 Documentation是很清楚的:

返回:
找到的實體實例或NULL,如果實體不存在

此bug已被報道HHH-7861。這是固定在4.1.10,它還沒有發佈。

+0

謝謝你。在某些時候我們會升級,這對我們來說不再是一個問題。 – DuncanKinnear

0

OK,回答我的問題的第二部分,它似乎在案件2 removefind之間的flush使其行爲相同情況1.也就是說,find剛剛返回null未拋出異常(這是我們想要的,因爲異常觸發了回滾)。

答案點將發送給任何人誰可以告訴我爲什麼find應該有不同的行爲。

相關問題