ps:双向关联与单向关联的区别在于
1、双向关联:A能推出B,B也能推出A。
单向关联,只能由A推出B或者是B推出A。
例如:一个小组有多个员工,一个员工对应一个组。从员工的角度说是多对一,从小组的角度是一对多。
1 package com.model; 2 3 import java.util.Set; 4 5 import javax.persistence.Entity; 6 import javax.persistence.OneToMany; 7 import javax.persistence.Table; 8 9 @Entity 10 @Table(name="group") 11 public class Group { 12 private Integer id; 13 private String groupName; 14 private Set<Worker> workers; 15 16 @OneToMany(mappedBy="group") 17 public Set<Worker> getWorkers() { 18 return workers; 19 } 20 public void setWorkers(Set<Worker> workers) { 21 this.workers = workers; 22 } 23 public Integer getId() { 24 return id; 25 } 26 public void setId(Integer id) { 27 this.id = id; 28 } 29 public String getGroupName() { 30 return groupName; 31 } 32 public void setGroupName(String groupName) { 33 this.groupName = groupName; 34 } 35 }
1 package com.model; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.GeneratedValue; 9 import javax.persistence.GenerationType; 10 import javax.persistence.Id; 11 import javax.persistence.JoinColumn; 12 import javax.persistence.ManyToOne; 13 import javax.persistence.Table; 14 15 @Entity 16 @Table(name="worker") 17 public class Worker implements Serializable{ 18 /** 19 * @author yzy 20 * @2014年11月1日15:31:08 21 */ 22 private static final long serialVersionUID = 1L; 23 private Integer id; 24 private String name; 25 private String password; 26 private Integer sex; 27 private Integer age; 28 private Date birthdate; 29 private Group group; 30 private String position; 31 private String telephone; 32 private Date enterDate; 33 private Float performance; 34 private Integer gold; 35 36 public Worker(){ 37 38 } 39 40 @Id @GeneratedValue(strategy=GenerationType.AUTO) 41 @Column(name="worker_id") 42 public Integer getId() { 43 return id; 44 } 45 public void setId(Integer id) { 46 this.id = id; 47 } 48 @Column(name="worker_name") 49 public String getName() { 50 return name; 51 } 52 public void setName(String name) { 53 this.name = name; 54 } 55 @Column(name="worker_password") 56 public String getPassword() { 57 return password; 58 } 59 public void setPassword(String password) { 60 this.password = password; 61 } 62 @Column(name="worker_sex") 63 public Integer getSex() { 64 return sex; 65 } 66 public void setSex(Integer sex) { 67 this.sex = sex; 68 } 69 @Column(name="worker_age") 70 public Integer getAge() { 71 return age; 72 } 73 public void setAge(Integer age) { 74 this.age = age; 75 } 76 @Column(name="worker_birthdate") 77 public Date getBirthdate() { 78 return birthdate; 79 } 80 public void setBirthdate(Date birthdate) { 81 this.birthdate = birthdate; 82 } 83 @ManyToOne//多对一,一个员工只能在一个小组,一个小组有多名成员 84 @JoinColumn(name="group_id") 85 public Group getGroup() { 86 return group; 87 } 88 public void setGroup(Group group) { 89 this.group = group; 90 } 91 @Column(name="worker_position") 92 public String getPosition() { 93 return position; 94 } 95 public void setPosition(String position) { 96 this.position = position; 97 } 98 @Column(name="worker_telephone") 99 public String getTelephone() { 100 return telephone; 101 } 102 public void setTelephone(String telephone) { 103 this.telephone = telephone; 104 } 105 @Column(name="worker_enterDate") 106 public Date getEnterDate() { 107 return enterDate; 108 } 109 public void setEnterDate(Date enterDate) { 110 this.enterDate = enterDate; 111 } 112 @Column(name="worker_performance") 113 public Float getPerformance() { 114 return performance; 115 } 116 public void setPerformance(Float performance) { 117 this.performance = performance; 118 } 119 @Column(name="worker_gold") 120 public Integer getGold() { 121 return gold; 122 } 123 public void setGold(Integer gold) { 124 this.gold = gold; 125 } 126 127 128 }
一对多时在多的那一方设置一的外键,如上是在Worker中设置Group的外键。双向关联必设 mappedBy属性,总是由多的一方来维护。
举例:员工和组 一个group可以有多个worker,这里从group来说是一对多 而多个worker可以属于一个group 这里从worker来说是多对一 所以
不管是多对一还是一对多 都是在多的那方加外键。也就是说双向关联时在一的那一方设置mappedBy,即在Group实体中的getWorkers()方法上头加@OneToMany(mappedBy="group")