XML配置
1、一对一单向
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <many-to-one name="address" column="addressId" unique="true" not-null="true"/> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class>2.、一对一双向
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <many-to-one name="address" column="addressId" unique="true" not-null="true"/> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> <one-to-one name="person" property-ref="address"/> </class>3.、一对多单向
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <set name="addresses"> <key column="personId" not-null="true"/> <one-to-many class="Address"/> </set> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class>4、多对一单向
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <many-to-one name="address" column="addressId" not-null="true"/> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class>5、一对多双向
<hibernate-mapping> <class name="com.bjsxt.hibernate.Group" table="t_group"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="users" inverse=”true”> <key column="groupId"></key> //与<many-to-one>的column一致 <one-to-many class="com.bjsxt.hibernate.User"/> </set> </class> </hibernate-mapping><hibernate-mapping><class name="com.bjsxt.hibernate.User" table="t_user"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <many-to-one name="group" column="groupId"></many-to-one> </class></hibernate-mapping>
6、多对多单向
<hibernate-mapping><class name="com.bjsxt.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> </class></hibernate-mapping>
<hibernate-mapping><class name="com.bjsxt.hibernate.Teacher"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="students" table="t_s"> <key column="teacher_id"></key> <many-to-many class="com.bjsxt.hibernate.Student" column="student_id"/> </set> </class></hibernate-mapping>
7、多对多双向
<hibernate-mapping><class name="com.bjsxt.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="teachers" table="t_s" inverse=”true”> <key column="student_id"></key> <many-to-many class="com.bjsxt.hibernate.Teacher" column="teacher_id"/> </set> </class></hibernate-mapping>
<hibernate-mapping><class name="com.bjsxt.hibernate.Teacher"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="students" table="t_s"> <key column="teacher_id"></key> <many-to-many class="com.bjsxt.hibernate.Student" column="student_id"/> </set> </class></hibernate-mapping>
--------------------------------------------------------------------------------------------------------
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@GeneratedValuepublic 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@GeneratedValuepublic 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@GeneratedValuepublic 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;@ManyToOnepublic Group getGroup() { return group;}public void setGroup(Group group) { this.group = group;}@Id@GeneratedValuepublic 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@GeneratedValuepublic 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;@ManyToOnepublic Group getGroup() { return group;}public void setGroup(Group group) { this.group = group;}@Id@GeneratedValuepublic 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、多对多单向
@Entitypublic class Student {private int id;private String name;@Id@GeneratedValuepublic 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;}}
@Entitypublic class Teacher {private int id;private String name;private Set<Student> students = new HashSet<Student>();@Id@GeneratedValuepublic 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、多对多双向
@Entitypublic 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@GeneratedValuepublic 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;}}
@Entitypublic class Teacher {private int id;private String name;private Set<Student> students = new HashSet<Student>();@Id@GeneratedValuepublic 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;}}