Hibernate实体映射关系配置
Hibernate实体关系:双向关联,mappedBy必设
注解方式
1、一对一单向
@Entity???????
public class Husband{
?????????? @Id
?????????? @GenerateValue
???????????? pirvate int id;
???????????? private String name;
??????????? @OneToOne
??????????? @JoinColumn(name="wifeId")
???????????? private Wife wife;
????? }
??????? ?@Entity
???? public class Wife{
?????????? @Id
?????????? @GenerateValue
???????? private int id;
???????? private String name;
??? }
2.、一对一双向
@Entity???????
public class Husband{
?????????? @Id
?????????? @GenerateValue
???????????? pirvate int id;
???????????? private String name;
??????????? @OneToOne
??????????? @JoinColumn(name="wifeId")
???????????? private Wife wife;
????? }
?
??????? ?@Entity
???? public class Wife{
?????????? @Id
?????????? @GenerateValue
???????? private int id;
???????? private String name;
?????? @OneToOne(mappedBy="wife")
??????? private Husband husband;
??? }
3.、一对多单向
package com.bjsxt.hibernate;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
?private int id;
?private String name;
?private Set<User> users = new HashSet<User>();
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?@OneToMany
?@JoinColumn(name="groupId")? //不加出现3张表
?public Set<User> getUsers() {
??return users;
?}
?public void setUsers(Set<User> users) {
??this.users = users;
?}
}
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
?private int id;
?private String name;
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
4、多对一单向
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
?private int id;
?private String name;
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
?
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
?private int id;
?private String name;
?private Group group;
?@ManyToOne
?
?public Group getGroup() {
??return group;
?}
?public void setGroup(Group group) {
??this.group = group;
?}
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
5、一对多双向
package com.bjsxt.hibernate;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
?private int id;
?private String name;
?private Set<User> users = new HashSet<User>();
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?@OneToMany(mappedBy="group")
?
?public Set<User> getUsers() {
??return users;
?}
?public void setUsers(Set<User> users) {
??this.users = users;
?}
}
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
?private int id;
?private String name;
?private Group group;
?@ManyToOne
?public Group getGroup() {
??return group;
?}
?public void setGroup(Group group) {
??this.group = group;
?}
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
6、多对多单向
@Entity
public class Student {
?private int id;
?private String name;
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
@Entity
public class Teacher {
?private int id;
?private String name;
?private Set<Student> students = new HashSet<Student>();
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?@ManyToMany
?@JoinTable(name="t_s",
??joinColumns={@JoinColumn(name="teacher_id")},
??inverseJoinColumns={@JoinColumn(name="student_id")}
??)????//改变中间表的名字和字段名字
?public Set<Student> getStudents() {
??return students;
?}
?public void setStudents(Set<Student> students) {
??this.students = students;
?}
}
7、多对多双向
@Entity
public class Student {
?private int id;
?private String name;
?private Set<Teacher> teachers = new HashSet<Teacher>();
?@ManyToMany(mappedBy="students")
?public Set<Teacher> getTeachers() {
??return teachers;
?}
?public void setTeachers(Set<Teacher> teachers) {
??this.teachers = teachers;
?}
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
@Entity
public class Teacher {
?private int id;
?private String name;
?private Set<Student> students = new HashSet<Student>();
?@Id
?@GeneratedValue
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?@ManyToMany
?@JoinTable(name="t_s",
??joinColumns={@JoinColumn(name="teacher_id")},
??inverseJoinColumns={@JoinColumn(name="student_id")}
??)
?public Set<Student> getStudents() {
??return students;
?}
?public void setStudents(Set<Student> students) {
??this.students = students;
?}
}
XML配置
1、一对一单向
<class name="Person">
??? <id name="id" column="personId">
??????? <generator
????????column="addressId"
????????unique="true"
??????? not-null="true"/>
</class>
?
<class name="Address">
??? <id name="id" column="addressId">
??????? <generator column="personId">
??????? <generator
????????column="addressId"
????????unique="true"
??????? not-null="true"/>
</class>
?
<class name="Address">
? ??<id name="id" column="addressId">
??????? <generator
????????property-ref="address"/>
</class>
3.、一对多单向
<class name="Person">
??? <id name="id" column="personId">
??????? <generator
????????????not-null="true"/>
???? <one-to-many column="addressId">
??????? <generator column="personId">
??????? <generator
????????column="addressId"
??????? not-null="true"/>
</class>
?
<class name="Address">
??? <id name="id" column="addressId">
??????? <generator table="t_group">??<id name="id">???<generator inverse=”true”>???<key column="groupId"></key>? //与<many-to-one>的column一致???<one-to-many table="t_user">
??<id name="id">
???<generator column="groupId"></many-to-one>
??? </class>
</hibernate-mapping>6、多对多单向
<hibernate-mapping>
?<class name="com.bjsxt.hibernate.Student">
??<id name="id">
???<generator table="t_s">
???<key column="teacher_id"></key>
???<many-to-many column="student_id"/>
??</set>
??? </class>
</hibernate-mapping>7、多对多双向
<hibernate-mapping>
?<class name="com.bjsxt.hibernate.Student">
??<id name="id">
???<generator table="t_s" inverse=”true”>
???<key column="student_id"></key>
???<many-to-many column="teacher_id"/>
??</set>
??? </class>
</hibernate-mapping><hibernate-mapping>
?<class name="com.bjsxt.hibernate.Teacher">
??<id name="id">
???<generator table="t_s">
???<key column="teacher_id"></key>
???<many-to-many column="student_id"/>
??</set>
??? </class>
</hibernate-mapping>?