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 @Entity
16 @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     @Id
23     @GeneratedValue
24     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     //为什么是ManyToOne
10     //user 是多的一方,所以就是多对一(ManyToOne)
11     @ManyToOne
12     public Group getBgroup() {
13         return bgroup;
14     }
15 
16 
17     public void setBgroup(Group bgroup) {
18         this.bgroup = bgroup;
19     }
20 
21 
22     @Id
23     @GeneratedValue
24     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 }

数据库表的生成如下:

 

posted @ 2014-12-18 13:00  Mokaffe  阅读(160)  评论(0编辑  收藏  举报