2011-11-08 59 views
9

如果你從db中加載一個實體並以某種方式修改它,hibernate會使用equals/hashCode比較實體的當前狀態和它的快照以確定是否需要執行sql更新?hibernate如何使用equals()和hashCode()?

如果它做了這樣的comprasions,我還有一個問題:如果equals會返回true,那麼hibernate會認爲該實體沒有改變或試圖使用它的默認的comprasion(可以肯定)?

回答

9

請參閱JBoss社區網站上的Equals and HashCode。從那裏:

爲了避免使用「半」 -unique屬性的持久化類的 來實現equals()這個問題,我們建議(和hashCode())。 基本上你應該認爲你的數據庫標識符根本沒有 業務含義(請記住,代理標識符屬性和 自動生成的值無論如何都是推薦的)。數據庫 標識符屬性應該只是一個對象標識符,基本上 應該只被Hibernate使用。當然,您也可以使用 數據庫標識符作爲方便的只讀句柄,例如在Web應用程序中構建 鏈接。

換句話說,Hibernate使用equals和hashCode作爲標識,而不是查看對象是否已被修改。它通過屬性比較來使用屬性。

+1

沒有看到Hibernate在這個引用和頁面中使用equals()和hashCode()的證據 – Lu55

3

不是Hibernate專家,但您可能會發現this手動啓蒙部分。

相關問題