hibernate联合主键的创建方法实例

hibernate联合主键的创建方法实例,总结个hibernate联合主键的创建方式,刚看完兵爷的视频,赶紧弄下来。冬爷,赶紧膜拜知道不?我这弄下来是为了明天面试,压力大很知道不?
联合主键,讲一张表中两个属性同时作为主键。
student.java

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Entity
@IdClass(value=StudentPK.class)
public class Student {

//@EmbeddedId
//private StudentPK pk;
@Id
private int id;
@Id
private String name;

// public StudentPK getPk() {
// return pk;
// }
// public void setPk(StudentPK pk) {
// this.pk = pk;
// }
private int age;

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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}
还有另外一个类专门设立有关主键的两个变量。
studentPK.java

Java代码  收藏代码
  1. package com.hibernate.finalmodel;
  2. import java.io.Serializable;
  3. import javax.persistence.Embeddable;
  4. public class StudentPK implements Serializable {
  5.     private int id;
  6.     private String name;
  7.     public int getId() {
  8.         return id;
  9.     }
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.     public String getName() {
  14.         return name;
  15.     }
  16.     public void setName(String name) {
  17.         this.name = name;
  18.     }
  19.     public boolean equals(Object o) {
  20.         if(o instanceof StudentPK) {
  21.             StudentPK pk = (StudentPK) o;
  22.             if(this.id == pk.getId() && this.name.equals(pk.getName()))
  23.                 return true;
  24.         }
  25.         return false;
  26.     }
  27.     public int hashCode() {
  28.         return this.name.hashCode();
  29.     }
  30. }

这里必须重写equals和hashcode方法。重写hashcode是要定位name属性是否一致,在内存中,hashcode相同的对象线性储存。找到相同的hashcode后,在比较equals,从而得到联合主键的比较结果。
写一个单元测试
TestBase.java

Java代码  收藏代码
  1. package com.hibernate.finaltest;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.AnnotationConfiguration;
  5. import org.junit.After;
  6. import org.junit.AfterClass;
  7. import org.junit.Before;
  8. import org.junit.BeforeClass;
  9. import org.junit.Test;
  10. import com.hibernate.finalmodel.Student;
  11. import com.hibernate.finalmodel.StudentPK;
  12. public class TestBase {
  13.     private static SessionFactory sessionFactory = null;
  14.     Session session;
  15.     @BeforeClass
  16.     public static void preMethod() {
  17.         sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
  18. //      if(session == null)
  19. //          session = sessionFactory.openSession();
  20. //      else
  21. //          session = sessionFactory.getCurrentSession();
  22.     }
  23.     @AfterClass
  24.     public static void postMethod() {
  25.         sessionFactory.close();
  26.     }
  27.     @Test
  28.     public void testMethod() {
  29.         System.out.println(“start create student”);
  30.         session = sessionFactory.openSession();
  31. //      Student s = new Student();
  32. //      s.setAge(23);
  33. //      s.setName(“samuel”);
  34.         StudentPK pk = new StudentPK();
  35.         pk.setId(1);
  36.         pk.setName(“Andrew”);
  37.         Student s = new Student();
  38.         //s.setPk(pk);
  39.         s.setAge(7);
  40.         session.beginTransaction();
  41.         session.save(s);
  42.         session.getTransaction().commit();
  43.         session.close();
  44.     }
  45. }
  46. [/code
  47. 测试成功。
本文链接地址: hibernate联合主键的创建方法实例