这是我
1 单向一对多:
实体类:(课程类)Grade与(学生类)Student的一对多关系
学生类:
public class Student implements java.io.Serializable {// Fieldsprivate Long id;private String name;private Integer age;private Long gradeId;//省略set、get方法
}
bhm.xml:
<hibernate-mapping><class name="com.zx.model.Student" table="student" catalog="hibernate"><id name="id" type="java.lang.Long"><column name="id" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="name" length="50" /></property><property name="age" type="java.lang.Integer"><column name="age" /></property><property name="gradeId" type="java.lang.Long"><column name="grade_id" /></property></class>
</hibernate-mapping>
课程类:
public class Grade implements java.io.Serializable {// Fieldsprivate Long id;private String name;
}
xml
<hibernate-mapping><class name="com.zx.model.Grade" table="grade" catalog="hibernate"><id name="id" type="java.lang.Long"><column name="id" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="name" length="50" /></property><!-- 配置与student一对多的关系--><set name="students" inverse="true" cascade="delete"> <key column="grade_id" /> <one-to-many class="com.zx.model.Student"/> </set> </class>
</hibernate-mapping>
测试findById():
public static void main(String[] args) {GradeDAO gradeDAO = new GradeDAO();Grade grade = new Grade();grade.setId(1L);Grade grade2 = gradeDAO.findById(1L); for (Student stu : grade2.getStudents()) {log.debug(stu.getName());}}
关联查询不管inverse、cascade为何值时,都会查询到课程对应得学生集合。插入时只插入一张表,不会级联。
2 双向关联映射
在两个关联实体中,同时配置了两种关联关系,这是这两个实体间就形成了双向关联映射,查询数据时互不影响,但是插入、更新、删除数据就会产生级联更新的问题。一班来说关系的维护交给多的一方维护,那么就需要在“一”的一方的配置文件中,加入invers=”true”的设置。
Student:
<hibernate-mapping><class name="com.zx.model.Student" table="student" catalog="hibernate">....<!-- <property name="gradeId" type="java.lang.Long"><column name="grade_id" /></property> --><!-- 配置双向关联 --><many-to-one name="grade"><column name="grade_id"></column></many-to-one></class>
</hibernate-mapping>
Grade:
<hibernate-mapping><class name="com.zx.model.Grade" table="grade" catalog="hibernate">...<!-- 配置与student一对多的关系, **维护关系交给多的一方维护** --><set name="students" inverse="true" cascade="all"> <key column="grade_id" /> <one-to-many class="com.zx.model.Student"/> </set> </class>
</hibernate-mapping>