精通Hibernate:映射对象标识符

Java语言按内存地址来识别和区分同一个类的不同对象,而关系数据库按主键值来识别和区分同一个表中的不同记录。Hibernate使用对象标识符(OID)来建立内存中的对象和数据库中记录的对应关系,对象的OID和数据库表的主键对应。

台江ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

自然主键(具有业务含义的字段),如用户自定义的NAME;而代理主键不具备业务含义的字段,该字段一般取名为“ID”。

在java语言中,“==”判断的是引用,“equals”判断的是值。因此,

一、代理主键的映射

为了保证持久化对象的OID的唯一性和不变性,通常有Hibernate或底层数据库来给OID复制。因此,可以把持久化类的OID的setId()方法设置为Private类型以禁止Java应用程序随便修改OID;而把getId()方法设为public类型,使得Java应用程序都可以读取持久化对象。

在对象关系映射文件中,元素用来设置对象标识符,例如:

 
 
 
 
  1.  
  2.        
  3.  

二、自然主键的映射

自然主键是具有业务含义的主键。应尽量避免使用自然主键。

映射单个自然主键name

 
 
 
 
  1.  
  2.  
  3.  

在以上代码中,标识符生成策略为“assigned”,表示有应用程序为name属性赋值。

可以使用

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

来返回Customer的OID,以上返回的是Customer对象的name属性。

映射复合自然主键:

 
 
 
 
  1.  
  2.     
  3.     
  4.  
 
 
 
 
  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的记录 

映射复合自然主键的另一种方式为先定义单独的主键类。如下:

 
 
 
 
  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.  
  2.         
  3.         

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

假设上例中COMPANY_ID还作为外键参照COMPANYS表,那么Customer类中除了定义customerId属性,还必须定义company属性:

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

映射company属性的代码:

 
 
 
 
  1.  
  2.         
  3.          
  4.  
  5.  

以上元素的insert和update属性都是false,表明当Hibernate保存或者更新Customer对象时,会忽略company属性。

也可以用元素来映射company属性:

 
 
 
 
  1.  
  2.       
  3.       
  4.    

当前题目:精通Hibernate:映射对象标识符
分享地址:http://www.gawzjz.com/qtweb2/news27/2877.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联