首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate复合主键照射(基础应用)

2012-08-29 
hibernate复合主键映射(基础应用)一般来说,应用中的主键都是以表中的一列作为主键(也有无主键的表),独立主

hibernate复合主键映射(基础应用)
   一般来说,应用中的主键都是以表中的一列作为主键(也有无主键的表),独立主键的使用在hibernate中已经比较常见了,复合主键使用的场合一般用于复杂记录的时候。
   例:在一个企业中,可能有两个或者更多的人同名,此时名称已经区分不出他们了,但是可以区分的是他们的身份证编号也就是ID号
  
   在hibernate中也可以使用这种方式加以区分,就成为复合主键的映射
  
   将需要的主键独立成一个类

   示例如下
  

package vo;/** * 实体类 * @author Wang_yx * */public class Person {private PersonPK pk = new PersonPK();private String personEmail;private String personAddress;public PersonPK getPk() {return pk;}public void setPk(PersonPK pk) {this.pk = pk;}public String getPersonEmail() {return personEmail;}public void setPersonEmail(String personEmail) {this.personEmail = personEmail;}public String getPersonAddress() {return personAddress;}public void setPersonAddress(String personAddress) {this.personAddress = personAddress;}   }
  

package vo;/** * 复合主键类必须实现序列化接口 * @author Wang_yx * */public class PersonPK implements java.io.Serializable{private Integer id;private String personName;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}}


hibernate.cfg.xml 文件

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="vo.Person"> <!-- 复合主键的映射 此处的name属性必须和实体中的对象名一致-->     <composite-id name="pk">       <key-property name="id" column="id"></key-property>       <key-property name="personName" column="personname"></key-property>     </composite-id>          <!-- 普通属性的映射 --> <property name="personEmail" column="personemail"></property> <property name="personAddress" column="personaddress"></property></class></hibernate-mapping>


测试方法
package test;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import vo.Person;import vo.PersonPK;public class HibernateTest {    private static Configuration config = new Configuration().configure();private static  SessionFactory factory = null;    static{    factory = config.buildSessionFactory();    }    public static void loadPerson(){     Session session = factory.openSession();     Transaction tr = session.getTransaction();     PersonPK pk = new PersonPK();     pk.setId(new Integer(1));     pk.setPersonName("张三");     try{     tr.begin();     Person person = (Person) session.get(Person.class,pk);     if(person!=null){     System.out.print(person.getPersonAddress() + " ");     System.out.println(person.getPersonEmail());     }          tr.commit();     }catch(HibernateException e){     e.printStackTrace();     }finally{     session.close();     }     } /** * 复合主键测试 */public static void main(String[] args) {loadPerson();}}

热点排行