自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

精通Hibernate:映射對(duì)象標(biāo)識(shí)符

開(kāi)發(fā) 后端
Java語(yǔ)言按內(nèi)存地址來(lái)識(shí)別和區(qū)分同一個(gè)類的不同對(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)。

Java語(yǔ)言按內(nèi)存地址來(lái)識(shí)別和區(qū)分同一個(gè)類的不同對(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)。

自然主鍵(具有業(yè)務(wù)含義的字段),如用戶自定義的NAME;而代理主鍵不具備業(yè)務(wù)含義的字段,該字段一般取名為“ID”。

在java語(yǔ)言中,“==”判斷的是引用,“equals”判斷的是值。因此,

一、代理主鍵的映射

 

為了保證持久化對(duì)象的OID的唯一性和不變性,通常有Hibernate或底層數(shù)據(jù)庫(kù)來(lái)給OID復(fù)制。因此,可以把持久化類的OID的setId()方法設(shè)置為Private類型以禁止Java應(yīng)用程序隨便修改OID;而把getId()方法設(shè)為public類型,使得Java應(yīng)用程序都可以讀取持久化對(duì)象。

在對(duì)象關(guān)系映射文件中,<id>元素用來(lái)設(shè)置對(duì)象標(biāo)識(shí)符,例如:

  1. <id name="id"  type="long" column="ID">  
  2.      <generator class="increment"/>  
  3. </id> 

二、自然主鍵的映射

自然主鍵是具有業(yè)務(wù)含義的主鍵。應(yīng)盡量避免使用自然主鍵。

映射單個(gè)自然主鍵name

  1. <id name="name" column="NAME" type="string">  
  2. <generator class="assigned"/>  
  3. </id> 

在以上代碼中,標(biāo)識(shí)符生成策略為“assigned”,表示有應(yīng)用程序?yàn)閚ame屬性賦值。

可以使用

  1. Customer customer=new Customer();  
  2. session.getIdentifier(customer); 

來(lái)返回Customer的OID,以上返回的是Customer對(duì)象的name屬性。

映射復(fù)合自然主鍵:

  1. <composite-id>  
  2.   <key-property name="name" column="NAME" type="string">  
  3.   <key-property name="companyId" column="COMPANY_ID" type="long">  
  4. </composite-id> 
  1. Customer customer=new Customer();  
  2. customer.setName("Tom");  
  3. customer.setCompanyId(new Long(11));  
  4. session.saveORupadate(customer);//保存和更新指定記錄  
  5. session.get(Customer.class,customer);//獲取NAME字段為Tom并且COMPANY_ID字段為11的記錄 

映射復(fù)合自然主鍵的另一種方式為先定義單獨(dú)的主鍵類。如下:

  1. package mypack;  
  2. public class CustomerId  implements java.io.Serializable {  
  3.      private String name;  
  4.      private Company company;  
  5.  
  6.     public CustomerId() {  
  7.     }  
  8.  
  9.     public CustomerId(String name, Company company) {  
  10.        this.name = name;  
  11.        this.company = company;  
  12.     }  
  13.      
  14.     public String getName() {  
  15.         return this.name;  
  16.     }  
  17.       
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public Company getCompany() {  
  22.         return this.company;  
  23.     }  
  24.       
  25.     public void setCompany(Company company) {  
  26.         this.company = company;  
  27.     }  

在Customer類中不必定義name和companyId屬性,而是定義customerId屬性。

映射代碼如下:

  1. <composite-id name="customerId" class="mypack.CustomerId" >  
  2.       <key-property name="name" column="NAME"  type= "string" />  
  3.       <key-property name="companyId" column="COMPANY_ID" type="long"> </composite-id> 

三、自然主鍵(存在外鍵)的映射

假設(shè)上例中COMPANY_ID還作為外鍵參照COMPANYS表,那么Customer類中除了定義customerId屬性,還必須定義company屬性:

  1. private CustomerId customerId;  
  2. private Company company; 

映射company屬性的代碼:

  1. <composite-id name="customerId" class="mypack.CustomerId" >  
  2.       <key-property name="name" column="NAME"  type= "string" />  
  3.       <key-property name="companyId" column="COMPANY_ID" type="long">   
  4. </composite-id>  
  5. <many-to-one name="company" class="mypack.Company" column="COMPANY_ID" insert="false" update="false"/> 

以上<many-to-one>元素的insert和update屬性都是false,表明當(dāng)Hibernate保存或者更新Customer對(duì)象時(shí),會(huì)忽略company屬性。

也可以用<key-many-to-one>元素來(lái)映射company屬性:

  1. <composite-id name="customerId" class="mypack.CustomerId" >  
  2.     <key-property name="name" column="NAME"  type= "string" />  
  3.     <key-many-to-one name="company" class="mypack.Company" column="COMPANY_ID" />  
  4.   </composite-id> 

原文鏈接:http://blog.csdn.net/yu422560654/article/details/7085603

【編輯推薦】

  1. 精通Hibernate:映射一對(duì)多關(guān)聯(lián)關(guān)系
  2. 精通Hibernate:對(duì)象關(guān)系映射基礎(chǔ)
  3. 精通Hibernate:第一個(gè)Hibernate應(yīng)用
  4. Hibernate緩存何時(shí)使用和如何使用
  5. Hibernate連接Mysql中文亂碼處理
責(zé)任編輯:林師授 來(lái)源: yu422560654的博客
相關(guān)推薦

2009-09-23 10:41:10

對(duì)象標(biāo)識(shí)符Hibernate

2012-02-08 12:17:38

HibernateJava

2012-02-08 14:24:35

HibernateJava

2009-08-26 14:01:18

C#標(biāo)識(shí)符

2009-10-27 14:20:37

VB.NET動(dòng)態(tài)標(biāo)識(shí)符

2009-09-23 13:26:10

Hibernate對(duì)象

2011-03-14 10:17:40

JavaScript

2022-07-17 06:57:02

時(shí)間戳唯一標(biāo)識(shí)符

2012-02-08 13:34:08

HibernateJava

2023-08-22 08:52:14

Go零值標(biāo)識(shí)符

2010-01-15 18:17:39

VB.NET動(dòng)態(tài)標(biāo)識(shí)

2009-12-08 19:29:10

PHP生成唯一標(biāo)識(shí)符

2009-06-26 18:07:12

JSF客戶端標(biāo)識(shí)符

2009-07-21 12:59:25

Scala標(biāo)識(shí)符

2025-01-26 10:35:42

Go語(yǔ)言類型

2017-04-21 12:30:45

AndroidAndroid O設(shè)備標(biāo)識(shí)符

2023-05-28 00:09:21

2023-09-26 07:28:47

2024-06-05 08:47:20

Go語(yǔ)言方式

2012-02-02 16:13:29

HibernateJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)