av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

簡述Hibernate兩種方法的實(shí)現(xiàn)

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

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

想把持久類的實(shí)例放入Set中(當(dāng)表示多值關(guān)聯(lián)時,推薦這么做)

想重用脫管實(shí)例

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

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

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

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

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

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

 
 
 
  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.  

注意:

業(yè)務(wù)鍵不必像數(shù)據(jù)庫的主鍵那樣固定不變。對業(yè)務(wù)鍵而言,不可變或唯一的屬性是不錯的選擇。


網(wǎng)站欄目:簡述Hibernate兩種方法的實(shí)現(xiàn)
分享地址:http://uogjgqi.cn/article/dpohipe.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流