首页 > 代码库 > Hibernate!!多对一与一对多双向关联映射

Hibernate!!多对一与一对多双向关联映射

双向的时候必须制定MappedBy这个属性!防止数据库生成的冗余。

MappedBy属性是设置在多的一方,即在数据库中,一般都是将属性设置在多的一方。

如果没有,那么在生成数据库表的时候,就会有两个外键如图:

 

onetomany的例子如下

加入MappedBy这个属性的 例子:

 1 package com.hb.model; 2  3 import java.util.Collection; 4 import java.util.HashSet; 5 import java.util.Iterator; 6 import java.util.Set; 7  8 import javax.persistence.Entity; 9 import javax.persistence.GeneratedValue;10 import javax.persistence.Id;11 import javax.persistence.JoinColumn;12 import javax.persistence.OneToMany;13 import javax.persistence.Table;14 15 @Entity16 @Table(name="t_group")//group是关键字,不重新命名就没有表生成17 public class Group {18     private  int  id ;19     private  String  name ;20     private  Set<User>  users = new  HashSet<User>();21     22     @Id23     @GeneratedValue24     public int getId() {25         return id;26     }27     28     //group是user类的属性名29         30     //因为是一 到 多的那边,所以设置的东西会出现在多的那方,这样理解31     //为什么是OneToMany 32     //group 是一的一方,所以就是一对多(OneToMany)33     @OneToMany(mappedBy="bgroup") 34 //    @JoinColumn(name="groupId") //记住,永远会加在多的一方35     //如果加上@JoinColumn(name="groupId"),则会在user表出现这个列,是自动生成的别名36     public Set<User> getUsers() {37         return users;38     }39 40     41     public void setId(int id) {42         this.id = id;43     }44     public String getName() {45         return name;46     }47     public void setName(String name) {48         this.name = name;49     }50     public void setUsers(Set<User> users) {51         this.users = users;52     }53 54 }

 

 1 @Entity 2 @Table(name="t_user") 3 public class User { 4     private  int  id ; 5     private  String  name ; 6     private  Group  bgroup; 7      8     //数据库表中,关联关系设置在多的一方 9     //为什么是ManyToOne10     //user 是多的一方,所以就是多对一(ManyToOne)11     @ManyToOne12     public Group getBgroup() {13         return bgroup;14     }15 16 17     public void setBgroup(Group bgroup) {18         this.bgroup = bgroup;19     }20 21 22     @Id23     @GeneratedValue24     public int getId() {25         return id;26     }27     28     public void setId(int id) {29         this.id = id;30     }31     public String getName() {32         return name;33     }34     public void setName(String name) {35         this.name = name;36     }37 38 }

数据库表的生成如下:

 

Hibernate!!多对一与一对多双向关联映射