首页 > 代码库 > 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!!多对一与一对多双向关联映射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。