小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hibernate入門(mén)之實(shí)作equals和hashCode

 WindySky 2007-07-15
實(shí)作equals和hashCode
 Hibernate并不保證不同時(shí)間所取得的數(shù)據(jù)對(duì)象,其是否參考至內(nèi)存的同一位置,使用==來(lái)比較兩個(gè)對(duì)象的數(shù)據(jù)是否代表數(shù)據(jù)庫(kù)中的同一筆數(shù)據(jù)是不可行的,而Object預(yù)設(shè)的equals()本身即比較對(duì)象的內(nèi)存參考,如果您要有必要比較透過(guò)查詢(xún)后兩個(gè)對(duì)象的數(shù)據(jù)是否相同(例如當(dāng)對(duì)象被儲(chǔ)存至Set時(shí))您必須實(shí)作equals()與hashCode()。
 一個(gè)實(shí)作equals()與hashCode()的方法是根據(jù)數(shù)據(jù)庫(kù)的identity,一個(gè)方法是透過(guò)getId()方法取得對(duì)象的id值并加以比較,例如若id的型態(tài)是String,一個(gè)實(shí)作的例子如下:
User.java
public class User {
....

public boolean equals(Object o) {
if(this == o) return true;
if(id == null || !(o instanceof User)) return false;

final User user == (User) o;
return this.id.equals(user.getId());
}

public int hasCode() {
return id == null ? System.identityHashCode(this) : id.hashcode();
}

}
 這個(gè)例子取自于Hibernate in Action第123頁(yè)的范例,然而這是個(gè)不被鼓勵(lì)的例子,因?yàn)楫?dāng)一個(gè)對(duì)象被new出來(lái)而還沒(méi)有save()時(shí),它并不會(huì)被賦予id值,這時(shí)候就不適用這個(gè)方法。
 一個(gè)比較被采用的方法是根據(jù)對(duì)象中真正包括的的屬性值來(lái)作比較,在參考手冊(cè)中給了一個(gè)例子:
Cat.java
public class Cat {

...
public boolean equals(Object other) {
if (this == other) return true;
if (!(other instanceof Cat)) return false;

final Cat cat = (Cat) other;

if (!getName().equals(cat.getName())) return false;
if (!getBirthday().equals(cat.getBirthday())) return false;

return true;
}

public int hashCode() {
int result;
result = getName().hashCode();
result = 29 * result + getBirthday().hashCode();
return result;
}

}
 我們不再簡(jiǎn)單的比較id屬性,這是一個(gè)根據(jù)商務(wù)鍵值(business key)實(shí)作equals()與hasCode()的例子,當(dāng)然留下的問(wèn)題就是您如何在實(shí)作時(shí)利用相關(guān)的商務(wù)鍵值,這就要根據(jù)您實(shí)際的商務(wù)需求來(lái)決定了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多