美文网首页SSHM四大框架
Hibernate之关系映射OneToMany

Hibernate之关系映射OneToMany

作者: 昵称已被占用了啊 | 来源:发表于2016-08-18 22:55 被阅读778次

ManyToOne单向

one Many one的hbm.xml
many的hbm.xml

测试add:


先添加为1的一方
先添加为多的一方


先添加为one的一方,再添加为many的一方,共需要三条sql语句,

先添加为many的一方,再添加为one的一方,共需要五条sql语句,增加了更新语句

所以最佳实践:一定要先添加一的一方,之后再添加多的一方

测试load:

load

load加载时:关联对象的加载也是延迟的。

测试cascade=all的用处:

add

没有添加cascade=all的时候:抛出异常。

cascade

当添加了cascade之后,不会抛出异常。

但是同时cascade也会造成一些问题,在删除的时候:

delete

上述删除会抛出异常。原因如下:

如果删除的时候,cascade也会把关联的对象删除,但是对于多对一的情况来说,删除一个也会把关联的唯一一个删除,但是又因为还有其他对象在关联,所以删除不掉这个关联对象,导致这个对象也删除不掉,抛出异常,造成灾难。

所以没有特殊情况,不要使用cascade。

一般使用cascade的地方都是一One的地方进行删除时使用,特殊情况才使用cascade的add,正常情况add都是由程序员完成添加的

多Many的地方不建议使用cascade.




OneToMany单向

One:

one

Many

Many

映射文件:

One.hbm.xml
Many.HBM.XML

测试add:

add测试

load测试:

load

注意:使用lazy="extra"会稍微智能,会根据取值的不同来判断是调用count还是投影

特别注意oneToMany在添加和维护关系的时候比较麻烦,所以在开发中不建议使用oneToMany的单向。




ManyToOne双向

实体类

One
Many

映射文件:

One.hbm.xml
Many.hbm.xml

测试add

使用一的一端来维护关系:

add

结论:此处会生成五条sql语句,所以最佳实践是,先添加一的一方,再添加多的一方,不要使用一的一方来维护关系.

实施方法:在配置文件的set中可以通过设置inverse=true来明确不使用一的这一端来维护关系

one.hbm.xml

使用inverse=true的时候会生成三条sql语句,因为不会应为cr的增加而去更新student的表。

不去维护关系,自然就少了两条sql语句,但是同时由于在一的一端来添加,又inverse=true,所以会造成关联失败。这就需要程序员自己主动使用多的一方来维护关系。

使用多的一端来维护关系:

add

测试load:

load

因为有关联关系的存在都可以取出来数据。


相关文章

  • Hibernate之关系映射OneToMany

    ManyToOne单向 测试add: 先添加为one的一方,再添加为many的一方,共需要三条sql语句, 先添加...

  • Hibernate之关系映射

    一、单向关系之:一对多映射 一对多映射关系由one方(Department)来维护 many方:Employee ...

  • 4.hibernate映射(多对一)

    映射关系 映射是对象到表,映射关系是多个对象的关系映射到多张表的关系! cascade级联 hibernate的级...

  • Hibernate集合映射The method add in t

    package cn.itcast.onetomany; import org.hibernate.Session...

  • Hibernate介绍

    Hibernate的介绍: (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系映射框架...

  • Hibernate框架之关系映射

    关系映射(通过一个xxx.hbm.xml文件把java模型类和数据库表对应起来)的介绍,以一个java工程为例 H...

  • Hibernate之关系映射OneToOne

    OneToOne单向 实体类 映射文件 测试add 添加成功。 上述add: 如果person有对应的卡,再次添加...

  • Hibernate之关系映射ManyToMany

    ManyToMany双向 实体类: 映射文件: 测试add: 测试load: 结论:使用ManyToMany的时候...

  • Hibernate入门(一)之基本配置

    Hibernate是什么? Hibernate是一个开源的持久层ORM(对象关系映射)框架. Hibernate能...

  • Hibernate 映射关系

    0. 关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一、一对多和多对多几种关系。细...

网友评论

    本文标题:Hibernate之关系映射OneToMany

    本文链接:https://www.haomeiwen.com/subject/rnovsttx.html