Hibernate联合主键
话不多说,直接上demo:
现在又一个model类:用于做组员和分组的映射,是有两字段:uid和gid(均为主键),此时如果要引入Hibernate,则需要一下步骤:
1.将uid和gid抽离出来作为一个独立类:
View Code
1 package model; 2 3 import java.io.Serializable; 4 5 import javax.persistence.Embeddable; 6 7 @Embeddable 8 public class u_g_id implements Serializable{ 9 10 private int uid; 11 private int gid; 12 13 public u_g_id() { 14 super(); 15 } 16 17 public u_g_id(int uid, int gid) { 18 this.uid = uid; 19 this.gid = gid; 20 } 21 public int getUid() { 22 return uid; 23 } 24 public void setUid(int uid) { 25 this.uid = uid; 26 } 27 28 public int getGid() { 29 return gid; 30 } 31 public void setGid(int gid) { 32 this.gid = gid; 33 } 34 35 @Override 36 public boolean equals(Object o) { 37 if(o instanceof u_g_id) { 38 u_g_id pk = (u_g_id)o; 39 if(this.uid == pk.getUid() && this.gid == (pk.getGid())) { 40 return true; 41 } 42 } 43 return false; 44 } 45 @Override 46 public int hashCode() { 47 return super.hashCode(); 48 } 49 50 }
重点:1.@Embeddable标签
2.必须重写equals和hashcode方法
2.在user_group类中引用这个类:
View Code
1 package model; 2 3 import javax.persistence.Entity; 4 import javax.persistence.Id; 5 6 @Entity 7 public class user_group { 8 9 private u_g_id id; 10 11 @Id 12 public u_g_id getId() { 13 return id; 14 } 15 16 public void setId(u_g_id id) { 17 this.id = id; 18 } 19 20 21 22 }
然后就可以使用联合主键了:
View Code
1 public boolean addMember(int uid,int gid){ 2 Session s = this.getSession(); 3 s.beginTransaction(); 4 try{ 5 user_group ug = new user_group(); 6 ug.setId(new u_g_id(uid,gid)); 7 s.save(ug); 8 s.getTransaction().commit(); 9 }catch(Exception e){ 10 s.getTransaction().rollback(); 11 return false; 12 } 13 return true; 14 }