Hibernate的关联映射--一对多、
生活随笔
收集整理的這篇文章主要介紹了
Hibernate的关联映射--一对多、
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這是我
1 單向一對多:
實體類:(課程類)Grade與(學生類)Student的一對多關系
學生類:
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:
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>總結
以上是生活随笔為你收集整理的Hibernate的关联映射--一对多、的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlserver 2005 数据库的差
- 下一篇: 静态工具类注入service的方法