成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡述Hibernate兩種方法的實現

開發 后端
實現Hibernate equals()/HibernatehashCode()最顯而易見的方法是比較兩個對象標識符的值。如果值相同,則兩個對象對應于數據庫的同一行,因此它們是相等的(如果都被添加到 Set,則在Set中只有一個元素)。

Hibernate有很多方法,每一種方法都有自己實現的過程,這里詳述Hibernate兩種方法的實現Hibernate equals()和Hibernate hashCode()。

實現Hibernate equals()和hashCode()如果你有如下需求,你必須重載 equals() 和 hashCode()方法:

想把持久類的實例放入Set中(當表示多值關聯時,推薦這么做)

想重用脫管實例

Hibernate保證,僅在特定會話范圍內,持久化標識(數據庫的行)和Java標識是等價的。因此,一旦 我們混合了從不同會話中獲取的實例,如果希望Set有明確的語義,就必 須實現equals() 和hashCode()。

實現Hibernate equals()/HibernatehashCode()最顯而易見的方法是比較兩個對象標識符的值。如果值相同,則兩個對象對應于數據庫的同一行,因此它們是相等的(如果都被添加到 Set,則在Set中只有一個元素)。

不幸的是,對生成的標識不能 使用這種方法。Hibernate僅對那些持久化對象賦標識值,一個新創建的實例將不會有任何標識值。此外, 如果一個實例沒有被保存(unsaved),并且它當前正在一個Set中,保存它將會給這個對象 賦一個標識值。

如果Hibernate equals() 和Hibernate hashCode()是基于標識值 實現的,則其哈希碼將會改變,這違反了Set的契約。建議去Hibernate的站點閱讀關于這個 問題的全部討論。

注意:這不是Hibernate的問題,而是一般的Java對象標識和Java對象等價的語義問題。

我們建議使用業務鍵值相等(Business key equality)來實現equals() 和 hashCode()。業務鍵值相等的意思是,equals()方法 僅僅比較形成業務鍵的屬性,它能在現實世界里標識我們的實例(是一個自然的候選碼)。

  1. public class Cat {  
  2.  
  3.     ...  
  4.     public boolean equals(Object other) {  
  5.         if (this == other) return true;  
  6.         if ( !(other instanceof Cat) ) return false;  
  7.  
  8.         final Cat cat = (Cat) other;  
  9.  
  10.         if ( !cat.getLitterId().equals( getLitterId() ) ) return false;  
  11.         if ( !cat.getMother().equals( getMother() ) ) return false;  
  12.  
  13.         return true;  
  14.     }  
  15.  
  16.     public int hashCode() {  
  17.         int result;  
  18.         result = getMother().hashCode();  
  19.         result = 29 * result + getLitterId();  
  20.         return result;  
  21.     }  
  22.  

注意:

業務鍵不必像數據庫的主鍵那樣固定不變。對業務鍵而言,不可變或唯一的屬性是不錯的選擇。

【編輯推薦】

  1. 簡述Hibernate中加載并存儲對象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動狀態檢測
  4. 解讀Hibernate高級集合映射
  5. Hinerbate單端關聯代理頗析
責任編輯:仲衡 來源: javanb
相關推薦

2010-09-07 11:18:10

2010-07-26 15:42:34

Perl模塊

2011-07-14 17:50:50

domino數據庫

2010-08-04 17:41:52

掛載NFS

2010-08-03 13:53:47

Flex+Java配置

2009-08-05 15:54:49

Web Service

2009-04-21 11:23:56

Oraclespool比較

2010-04-13 09:50:44

Oracle跟蹤

2011-03-30 17:04:24

MySQL添加用戶

2010-11-24 14:36:25

修復mysql表

2024-01-02 11:45:00

讀取requestmap

2010-09-13 13:05:03

sql server分

2010-11-10 13:22:41

SQL Server備

2010-11-09 13:09:58

SQL Server分

2010-05-28 10:35:46

SVN搭建測試服務器

2010-06-02 17:16:16

自動運行SVN

2010-02-06 14:35:36

ibmdwRUP迭代

2010-09-09 19:53:50

2009-08-05 13:34:18

C#日期相減

2009-06-18 11:09:42

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美理伦片在线播放 | 欧美一区二区三区在线观看视频 | 狠狠爱免费视频 | 伊人成人免费视频 | 午夜看片网站 | 亚洲精品久久久久久久不卡四虎 | 日本黄色一级片视频 | 国产精品久久久久久妇女6080 | 狠狠操操| 亚洲欧洲小视频 | 91av国产在线视频 | 日韩精品无码一区二区三区 | 国产视频福利在线观看 | 男人天堂免费在线 | 伊色综合久久之综合久久 | 国产精品视频一二三区 | 日韩av免费在线观看 | 一区二区三区视频免费观看 | 国产伊人久久久 | 日韩精品色网 | 日韩在线观看视频一区 | 成人午夜av| 精品日本久久久久久久久久 | 福利精品| 久久99精品视频 | 国产99视频精品免费播放照片 | 国内自拍偷拍视频 | 精品一区二区三区免费视频 | 欧美日本在线 | 国产成人网 | 久草中文在线 | 欧美九九九 | 欧美一区二区三区的 | 日本不卡免费新一二三区 | 日本三级网 | av性色全交蜜桃成熟时 | 毛片免费在线观看 | 精品国产一区二区在线 | 国产视频二区在线观看 | 能看的av网站 | 国产精品一区二区福利视频 |