新聞中心
Java語(yǔ)言按內(nèi)存地址來(lái)識(shí)別和區(qū)分同一個(gè)類(lèi)的不同對(duì)象,而關(guān)系數(shù)據(jù)庫(kù)按主鍵值來(lái)識(shí)別和區(qū)分同一個(gè)表中的不同記錄。Hibernate使用對(duì)象標(biāo)識(shí)符(OID)來(lái)建立內(nèi)存中的對(duì)象和數(shù)據(jù)庫(kù)中記錄的對(duì)應(yīng)關(guān)系,對(duì)象的OID和數(shù)據(jù)庫(kù)表的主鍵對(duì)應(yīng)。

臺(tái)江ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
自然主鍵(具有業(yè)務(wù)含義的字段),如用戶自定義的NAME;而代理主鍵不具備業(yè)務(wù)含義的字段,該字段一般取名為“ID”。
在java語(yǔ)言中,“==”判斷的是引用,“equals”判斷的是值。因此,
一、代理主鍵的映射
為了保證持久化對(duì)象的OID的唯一性和不變性,通常有Hibernate或底層數(shù)據(jù)庫(kù)來(lái)給OID復(fù)制。因此,可以把持久化類(lèi)的OID的setId()方法設(shè)置為Private類(lèi)型以禁止Java應(yīng)用程序隨便修改OID;而把getId()方法設(shè)為public類(lèi)型,使得Java應(yīng)用程序都可以讀取持久化對(duì)象。
在對(duì)象關(guān)系映射文件中,
二、自然主鍵的映射
自然主鍵是具有業(yè)務(wù)含義的主鍵。應(yīng)盡量避免使用自然主鍵。
映射單個(gè)自然主鍵name
在以上代碼中,標(biāo)識(shí)符生成策略為“assigned”,表示有應(yīng)用程序?yàn)閚ame屬性賦值。
可以使用
- Customer customer=new Customer();
- session.getIdentifier(customer);
來(lái)返回Customer的OID,以上返回的是Customer對(duì)象的name屬性。
映射復(fù)合自然主鍵:
- Customer customer=new Customer();
- customer.setName("Tom");
- customer.setCompanyId(new Long(11));
- session.saveORupadate(customer);//保存和更新指定記錄
- session.get(Customer.class,customer);//獲取NAME字段為T(mén)om并且COMPANY_ID字段為11的記錄
映射復(fù)合自然主鍵的另一種方式為先定義單獨(dú)的主鍵類(lèi)。如下:
- package mypack;
- public class CustomerId implements java.io.Serializable {
- private String name;
- private Company company;
- public CustomerId() {
- }
- public CustomerId(String name, Company company) {
- this.name = name;
- this.company = company;
- }
- public String getName() {
- return this.name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Company getCompany() {
- return this.company;
- }
- public void setCompany(Company company) {
- this.company = company;
- }
- }
在Customer類(lèi)中不必定義name和companyId屬性,而是定義customerId屬性。
映射代碼如下:
三、自然主鍵(存在外鍵)的映射
假設(shè)上例中COMPANY_ID還作為外鍵參照COMPANYS表,那么Customer類(lèi)中除了定義customerId屬性,還必須定義company屬性:
- private CustomerId customerId;
- private Company company;
映射company屬性的代碼:
以上
也可以用
分享名稱:精通Hibernate:映射對(duì)象標(biāo)識(shí)符
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dhpojhi.html


咨詢
建站咨詢
