这是我

1 单向一对多:

实体类:(课程类)Grade与(学生类)Student的一对多关系

学生类:

public class Student implements java.io.Serializable {
// Fields
private 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 {
// Fields
private 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>

最新文章

  1. Ueditor之前后端源码的学习和简单的研究
  2. [No000087]Linq排序,SortedList排序,二分法排序性能比较
  3. SQL Server 常用日期查询语句
  4. POJ2135 Farm Tour
  5. Delphi ThreadPool 线程池(Delphi2009以上版本适用)
  6. Unity3D脚本中文系列教程(五)
  7. DbHelper第三版, 数据库通吃
  8. MySQL注入总结
  9. 安装SQL Server 那些事儿
  10. expect set timeout -1 永不超时
  11. how to use tar?
  12. 浅论Javascript在汽车信号测试中的应用
  13. asp.net core 实战项目(一)——ef core的使用
  14. Java设计模式之五 ----- 外观模式和装饰器模式
  15. Mock&amp;Spring集成
  16. 什么是 DDoS 攻击?
  17. 如何在CentOS里切换操作系统所用的语言,中英文切换
  18. Scala 知识点掌握1
  19. BZOJ 4650 [Noi2016]优秀的拆分:后缀数组
  20. 【转】C#获取客户端及服务器端主机信息及其获取IP地址

热门文章

  1. java NIO面试题剖析
  2. [技术博客]windows中使用docker技术
  3. Metasploit使用内网跳板, 扫描局域网主机
  4. JAVA | Java对象的内存分配过程是如何保证线程安全的?
  5. vs2015 项目调试出现未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
  6. Embarcadero Delphi 7 Lite 7.0.4.453 中文版
  7. svg轻松实现文字水印
  8. 解决VM Workstation安装VMware Tools显示灰色的办法
  9. 查看表空间使用情况(SQL)
  10. [LeetCode] 641.Design Circular Deque 设计环形双向队列