Hibernate xml配置方法 之 联合主键

来源:互联网 发布:淘宝卖什么单体利润大 编辑:程序博客网 时间:2024/06/08 05:56

StudentPK类,存放Student的联合主键,必须实现java.io.Serializable接口(为了序列化扩充移植),必须重写equals跟hashCode方法(为了确保唯一性)

public class StudentPK implements java.io.Serializable{ private int id; private String name; public int getId() {  return id; } public void setId(int id) {  this.id = id; } public String getName() {  return name; } public void setName(String name) {  this.name = name; }  @Override public boolean equals(Object o) {  if(o instanceof StudentPK) {   StudentPK pk = (StudentPK)o;   if(this.id == pk.getId() && this.name.equals(pk.getName())) {    return true;   }  }  return false; }  @Override public int hashCode() {  return this.name.hashCode(); }}
package com.bjsxt.hibernate;public class Student {  private StudentPK pk;  private int age; private String sex; private boolean good; public boolean isGood() {  return good; } public void setGood(boolean good) {  this.good = good; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } public String getSex() {  return sex; } public void setSex(String sex) {  this.sex = sex; } public StudentPK getPk() {  return pk; } public void setPk(StudentPK pk) {  this.pk = pk; }}
Student.hbm.xml:

<hibernate-mapping> <class name="com.bjsxt.hibernate.Student">       <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">   <key-property name="id"></key-property>   <key-property name="name"></key-property>  </composite-id>    <property name="age" />  <property name="sex" />  <property name="good" type="yes_no"></property>    </class> </hibernate-mapping>
测试文件:

import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;public class HibernateIDTest { private static SessionFactory sessionFactory;  @BeforeClass public static void beforeClass() {   sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void afterClass() {  sessionFactory.close(); }  @Test public void testStudentSave() {  StudentPK pk = new StudentPK();  pk.setId(5);  pk.setName("zhangsan5");  Student s = new Student();  s.setPk(pk);  s.setAge(8);      Session session = sessionFactory.getCurrentSession();  session.beginTransaction();  session.save(s);  session.getTransaction().commit(); }  @Test public void testTeacherSave() {   Teacher t = new Teacher();  t.setId(5);  t.setName("t5");  t.setTitle("middle5");  t.setBirthDate(new Date());    Session session = sessionFactory.getCurrentSession();  session.beginTransaction();  session.save(t);  session.getTransaction().commit(); }  public static void main(String[] args) {  beforeClass(); }}