_001_Hibernate的复合主键

转载 2018年04月21日 17:23:59
1>:首先将要作为主键的属性首先抽取成单独的实体  并提供get And set方法  并且还需要序列化

      比如现在有一个实体 People ,具有属性pName,pAddress,pJavaScore,pCscore

     复合主键为pName,pAddress

   将这两个属性抽离形成一个新的实体并提供setter,gettter方法实现序列化

compositionkey.java

[java] view plain copy
  1. import java.io.Serializable;  
  2.   
  3. /** 
  4.  *  
  5.  * @author Guomin JIn 
  6.  * 
  7.  */  
  8. public class CompositionKey implements Serializable{  
  9.     private String pName;  
  10.     private String pAddress;  
  11.     public String getpName() {  
  12.         return pName;  
  13.     }  
  14.     public void setpName(String pName) {  
  15.         this.pName = pName;  
  16.     }  
  17.     public String getpAddress() {  
  18.         return pAddress;  
  19.     }  
  20.     public void setpAddress(String pAddress) {  
  21.         this.pAddress = pAddress;  
  22.     }  
  23.       
  24. }  

  2>:在实际的实体中申明主键实体的变量

抽离之后的Peopel实体如下:

People.java

[java] view plain copy
  1. package cn.pzhu.composition;  
  2. /** 
  3.  * 实体类 
  4.  * @author Guomin JIn 
  5.  * 
  6.  */  
  7. public class People {  
  8.     private CompositionKey key;  
  9.     private float pJavaScore;  
  10.     private float pCScore;  
  11.     public CompositionKey getKey() {  
  12.         return key;  
  13.     }  
  14.     public void setKey(CompositionKey key) {  
  15.         this.key = key;  
  16.     }  
  17.     public float getpJavaScore() {  
  18.         return pJavaScore;  
  19.     }  
  20.     public void setpJavaScore(float pJavaScore) {  
  21.         this.pJavaScore = pJavaScore;  
  22.     }  
  23.     public float getpCScore() {  
  24.         return pCScore;  
  25.     }  
  26.     public void setpCScore(float pCScore) {  
  27.         this.pCScore = pCScore;  
  28.     }  
  29.     @Override  
  30.     public String toString() {  
  31.         return "People [key=" + key + ", pJavaScore=" + pJavaScore + ", pCScore=" + pCScore + "]";  
  32.     }  
  33.       
  34.       
  35. }  

  3>:在映射文件中编写实体的配置文件 

配置文件如下:

hibernate.cfg.xml省略()

people.hbm.xml

[html] view plain copy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="cn.pzhu.composition">  
  7.     <class name="People" table="peopel" >  
  8.         <composite-id name="key">  
  9.             <key-property name="pName" length="10" type="java.lang.String"></key-property>  
  10.             <key-property name="pAddress" length="10" type="java.lang.String"></key-property>  
  11.         </composite-id>  
  12.         <property name="pJavaScore" length="5"/>  
  13.         <property name="pCScore"></property>  
  14.     </class>  
  15. </hibernate-mapping>  
4>:编写测试类

测试类使用junit

[java] view plain copy
  1. @Test  
  2.     public void test_0001() {  
  3.         Session session=new Configuration()  
  4.         .configure("hibernate.cfg.xml")  
  5.         .addClass(People.class)  
  6.         .buildSessionFactory()  
  7.         .openSession();  
  8.           
  9.         session.beginTransaction();  
  10.           
  11.         CompositionKey key=new CompositionKey();  
  12.         key.setpName("jgm");  
  13.         key.setpAddress("chengdu");  
  14.           
  15.         People people=new People();  
  16.         people.setKey(key);  
  17.         people.setpJavaScore(12.34f);  
  18.         people.setpCScore(36.2f);  
  19.         //HibernateUtil.save(people);  
  20.         session.save(people);  
  21.     }  

【Hibernate步步为营】--复合主键映射详解

复合主键的使用其实很简单,但是需要注意对象需要被拆分,主键自己需要一个类并且该类需要实现java.io.Serializable接口,其它的属性再重新生成新类,并且类的属性中要有主键类的对象,相应的只...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2014-06-04 13:09:42
  • 3500

JPA复合主键使用

数据库表create table RENT_CERT_VENDOR_TYPE ( CERT_TYPE_ID NUMBER not null, VENDOR_ID ...
  • mypop
  • mypop
  • 2011-01-18 13:51:00
  • 3072

hibernate 复合主键 注解

Hibernate注解规范的文档中提供了三种方法: 1. 将组件类注解为@Embeddable,并将组件的属性注解为@Id; 2. 将组件的属性注解为@Embeddable; pa...
  • ooiuy450
  • ooiuy450
  • 2017-02-16 00:19:21
  • 1032

sql server创建复合主键

sql server创建复合主键   创建复合主键:    方法一:创建表之后,alter table table_name add primary key(字段1,字段2)        ...
  • yz1988computer
  • yz1988computer
  • 2014-11-22 15:30:17
  • 1948

数据库中复合键的优缺点!

复合键最明显的优点是可以减少数据库表的数量。然而,复合键的缺点却也是很明显的:1.使得表与表之间的相互依赖性程度加深;2.会出现更为复杂的约束、规则;3.对用户更新数据的限制大大提高;4.这样的数据库...
  • hxd001_810
  • hxd001_810
  • 2006-05-23 15:37:00
  • 1280

Java程序员从笨鸟到菜鸟之(六十)细谈Hibernate(十一)hibernate复合主键映射

欢迎阅读本专题其他博客:                                                               细谈Hibernate(六)Hiberna...
  • csh624366188
  • csh624366188
  • 2012-05-28 14:16:02
  • 7906

Hibernate实现复合主键的使用

复合主键的使用 1>:首先将要作为主键的属性首先抽取成单独的实体 并提供get And set方法 并且还需要序列化 2>:在实际的实体中申明主键实体的变量 3>:在映射文件中编...
  • GuominJin
  • GuominJin
  • 2018-01-03 17:27:12
  • 155

复合主键与联合主键

一、复合主键   所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。 比如  create table test ( name varchar...
  • u011781521
  • u011781521
  • 2017-05-02 17:05:57
  • 14091

mysql设置复合主键方法

mysql设置复合主键方法 alter table tb_name add primary key (字段1,字段2,字段3);
  • cen_cs
  • cen_cs
  • 2015-05-28 15:10:26
  • 11413

关于Hibernate的复合主键查询

Hibernate查询是以主键的方式查询的,如查询的主键有重复,有多条记录复合查询条件的话,会导致查询出的记录不完整,Hibernate只能取出一条记录。所以就需要在在设计Hibernate的映射文件...
  • wangMail_3366
  • wangMail_3366
  • 2010-04-08 18:01:00
  • 1834
收藏助手
不良信息举报
您举报文章:_001_Hibernate的复合主键
举报原因:
原因补充:

(最多只允许输入30个字)