标签:hibernate
本文将介绍hibernate的几种关联关系映射:多对一、一对一、一对多、多对多。
以用户和组为例,假设多个用户对应一个组,用户即为多的一端,组即为一的一端。
关键代码和配置:
用户:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private Group group;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}<hibernate-mapping package="com.ado.test.hibernate.po"> <class name="User" table="t_user"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> <!-- cascade="all" fetch="join" --> <many-to-one name="group" column="groupid" /> </class> </hibernate-mapping>
组:
public class Group implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}<hibernate-mapping package="com.ado.test.hibernate.po"> <class name="Group" table="t_group"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> </class> </hibernate-mapping>
以人和身份证号为例,一个人对应一个身份证号。
关键代码和配置:
人:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private IdCard idCard;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}<hibernate-mapping package="com.ado.test.hibernate.po.one2one"> <class name="Person" table="t_person1"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> <many-to-one name="idCard" column="cardid" /> </class> </hibernate-mapping>
身份证号:
public class IdCard implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}<hibernate-mapping package="com.ado.test.hibernate.po.one2one"> <class name="IdCard" table="t_idcard"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> </class> </hibernate-mapping>
代码可参考上一小节内容,这里只列出关键配置:
人:
<hibernate-mapping package="com.ado.test.hibernate.po.one2oneforeign"> <class name="Person" table="t_person2"> <id name="id" column="id" type="long"> <generator class="foreign"> <param name="property">idCard</param> </generator> </id> <property name="name" column="name" /> <one-to-one name="idCard" /> </class> </hibernate-mapping>
身份证号:
<hibernate-mapping package="com.ado.test.hibernate.po.one2oneforeign"> <class name="IdCard" table="t_idcard2"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> </class> </hibernate-mapping>
以班级和学生为例,一个班级有多个学生,即班级为一的一端,学生为多的一端。
关键代码和配置:
班级:
public class Classes implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private Set<Student> students;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}<hibernate-mapping package="com.ado.test.hibernate.po.one2many"> <class name="Classes" table="t_class"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> <set name="students" <span style="color:#ff0000;">inverse="true"</span>> <key column="classid" not-null="true" /> <one-to-many class="Student" /> </set> </class> </hibernate-mapping>
注意:上面的配置中,增加了inverse="true"属性,可以避免保存Classes时,生成update语句维护映射关系(update t_student)。设置该属性后,保存数据时,要注意顺序,否则外键可能被设置空值。
学生:
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}<hibernate-mapping package="com.ado.test.hibernate.po.one2many"> <class name="Student" table="t_student"> <id name="id" column="id" type="long"> <generator class="increment" /> </id> <property name="name" column="name" /> </class> </hibernate-mapping>
标签:hibernate
原文地址:http://blog.csdn.net/ado1986/article/details/42836857