Java学习之道: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.   
  3. import java.io.Serializable;  
  4.   
  5. import javax.persistence.Embeddable;  
  6.   
  7.   
  8. public class StudentPK implements Serializable {  
  9.     private int id;  
  10.     private String name;  
  11.       
  12.     public int getId() {  
  13.         return id;  
  14.     }  
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.       
  25.     public boolean equals(Object o) {  
  26.         if(o instanceof StudentPK) {  
  27.             StudentPK pk = (StudentPK) o;  
  28.             if(this.id == pk.getId() && this.name.equals(pk.getName()))  
  29.                 return true;  
  30.         }  
  31.         return false;  
  32.     }  
  33.       
  34.     public int hashCode() {  
  35.         return this.name.hashCode();  
  36.     }  
  37. }  

这里必须重写equals和hashcode方法。重写hashcode是要定位name属性是否一致,在内存中,hashcode相同的对象线性储存。找到相同的hashcode后,在比较equals,从而得到联合主键的比较结果。 
写一个单元测试 
TestBase.java 
Java代码   收藏代码
  1. package com.hibernate.finaltest;  
  2.   
  3. import org.hibernate.Session;  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.AnnotationConfiguration;  
  6. import org.junit.After;  
  7. import org.junit.AfterClass;  
  8. import org.junit.Before;  
  9. import org.junit.BeforeClass;  
  10. import org.junit.Test;  
  11.   
  12. import com.hibernate.finalmodel.Student;  
  13. import com.hibernate.finalmodel.StudentPK;  
  14.   
  15. public class TestBase {  
  16.       
  17.     private static SessionFactory sessionFactory = null;  
  18.     Session session;  
  19.       
  20.     @BeforeClass  
  21.     public static void preMethod() {  
  22.         sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();  
  23. //      if(session == null)   
  24. //          session = sessionFactory.openSession();  
  25. //      else  
  26. //          session = sessionFactory.getCurrentSession();  
  27.     }  
  28.       
  29.     @AfterClass  
  30.     public static void postMethod() {  
  31.         sessionFactory.close();  
  32.     }  
  33.       
  34.     @Test  
  35.     public void testMethod() {  
  36.         System.out.println("start create student");  
  37.         session = sessionFactory.openSession();  
  38. //      Student s = new Student();  
  39. //      s.setAge(23);  
  40. //      s.setName("samuel");  
  41.         StudentPK pk = new StudentPK();  
  42.         pk.setId(1);  
  43.         pk.setName("Andrew");  
  44.         Student s = new Student();  
  45.         //s.setPk(pk);  
  46.         s.setAge(7);  
  47.         session.beginTransaction();  
  48.         session.save(s);  
  49.         session.getTransaction().commit();  
  50.         session.close();  
  51.           
  52.     }  
  53. }  
  54. [/code  
  55.   
  56. 测试成功。 
  57.     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值