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 }

数据库表的生成如下:

 

你可能感兴趣的:(Hibernate)