hibernate中关系映射

时间:2014-05-09 09:59:54   收藏:0   阅读:450

 在数据库中数据的对应关系有一对一,一对多和多对一.那么在hibernate中应该如何对应呢?如下:

 一对一:

 假设两个实体,一个实体类为husband,另外一个实体类为wife.一个丈夫只能对应一个妻子,反之亦然.那么在hibernate中使用annotation如下:(husband类)

bubuko.com,布布扣
 1 import javax.persistence.Entity;
 2 import javax.persistence.GeneratedValue;
 3 import javax.persistence.Id;
 4 import javax.persistence.JoinColumn;
 5 import javax.persistence.OneToOne;
 6 
 7 @Entity
 8 public class Husband {
 9     private int id;
10     private String name;
11     private Wife wife;
12     
13     @Id
14     @GeneratedValue
15     public int getId() {
16         return id;
17     }
18     public void setId(int id) {
19         this.id = id;
20     }
21     public String getName() {
22         return name;
23     }
24     public void setName(String name) {
25         this.name = name;
26     }
27     
28     @OneToOne    //表明是一对一
29     @JoinColumn(name="wifeId")    //使用JoinColumn可以更改数据库中对应字段的名字
30     public Wife getWife() {
31         return wife;
32     }
33     public void setWife(Wife wife) {
34         this.wife = wife;
35     }
36 }
bubuko.com,布布扣

 wife类:

bubuko.com,布布扣
 1 import javax.persistence.Entity;
 2 import javax.persistence.GeneratedValue;
 3 import javax.persistence.Id;
 4 
 5 @Entity
 6 public class Wife {
 7     private int id;
 8     private String name;
 9     
10     @Id
11     @GeneratedValue
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 }
bubuko.com,布布扣

 一对多:

 设想一个小组有多个成员,而每一个成员只能加入一个小组.在设计数据的时候,按照常理,人们会把小组的Id设到每个成员中,作为外键;下面分两种情况:

 1.将小组Id设到成员中:

bubuko.com,布布扣
 1 import javax.persistence.Entity;
 2 import javax.persistence.GeneratedValue;
 3 import javax.persistence.Id;
 4 import javax.persistence.Table;
 5 
 6 @Entity
 7 @Table(name="t_Group")  //这里注意:因为group是关键字,所以需要将表名更改
 8 public class Group {
 9     private int id;
10     private String name;
11     
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     @Id
19     @GeneratedValue
20     public int getId() {
21         return id;
22     }
23     public void setId(int id) {
24         this.id = id;
25     }
26 }
bubuko.com,布布扣

 Person类:

bubuko.com,布布扣
 1 import javax.persistence.Entity;
 2 import javax.persistence.GeneratedValue;
 3 import javax.persistence.Id;
 4 import javax.persistence.ManyToOne;
 5 
 6 @Entity
 7 public class Person {
 8     private Group group;
 9     private int id;
10     private String name;
11     
12     @ManyToOne        //表明多个Person对应一个Group
13     public Group getGroup() {
14         return group;
15     }
16     
17     @Id
18     @GeneratedValue
19     public int getId() {
20         return id;
21     }
22     public String getName() {
23         return name;
24     }
25     public void setGroup(Group group) {
26         this.group = group;
27     }
28     public void setId(int id) {
29         this.id = id;
30     }
31     public void setName(String name) {
32         this.name = name;
33     }
34 }
bubuko.com,布布扣

 2.将person的Id作为外键设到group中.方法类似于上面.只需将person属性添加到group中并在get方法上添加注解@OneToMany和@JoinColumn(name="groupId"),另外:因为把person添加到group中去了,那么在group实体类中person的返回类型应该是一个数组,Map,Set或者List,个人觉得Set比较好,因为set中元素没有重复的,符合数据库中的规律.所以你的代码应该写成类似这样:

bubuko.com,布布扣
 1 private Set<Person> person = new HashSet<Person>();
 2     
 3     @OneToMany
 4     @JoinColumn(name="personId")
 5     public Set<Person> getPerson() {
 6         return person;
 7     }
 8     public void setPerson(Set<Person> person) {
 9         this.person = person;
10     }
bubuko.com,布布扣

 3.多对多就很简单了,分解为多对一即可.这里就不一一赘述了.

hibernate中关系映射,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!