hibernate的关联关系,重点在理解级联cascade和inverse

1、cascade一般用在级联保存,级联更新,级联删除上
 
   1.1cascade注解有两种,一种是基于hibernate注解
org.hibernate.annotations.Cascade
org.hibernate.annotations.CascadeType
支持一下级联
ALL,
PERSIST//级联持久化,调用session.persist()时会触发级联事件
MERGE//级联保存或者更新,jpa规范 hibernate为了支持jsr220 后面添加的,调用session.merge()时触发级联
REMOVE,//级联删除,jpa规范同上,调用session.delete()时触发
REFRESH,
DELETE,//级联删除,session.delete()触发
SAVE_UPDATE,//级联保存或者更新session.save(),session.update(),session.saveOrUpdate();
REPLICATE,
    配置示例

@Cascade(value={org.hibernate.annotations.CascadeType.ALL})  private StudentInfo studentInfo ; 

1.2第二种注解是基于jpa规范,也就是apache jsr220规范,也是ejb3的持久层规范
javax.persistence.CascadeType
    ALL, 
        PERSIST,调用session.persist()时触发
    MERGE,调用session.merge()触发
        REMOVE,调用session.delete()触发
        REFRESH,
        DETACH
    配置示例

 @ManyToOne(cascade={CascadeType.MERGE})  @JoinColumn(name = "teacher_id")  private Teacher teacher;  

1.3级联一般用在OneToOne和OneToMany上,这也是hibernate官方的推荐,有时候我们在开发中也用在            ManyToOne,ManyToMany上,只是想在测试上少写点代码而已,在持久化一个实体的时候级联持久其他关联实体,
  如下:teacher和student是ManyToMany,加上了cascade注解,便于测试

 @Test  public void addStudentToTeacher(){  Student student1 = new Student("张三",20,20072733L);  Student student2 = new Student("李四",20,20072734L);  Student student3 = new Student("王五",20,20072735L);  Teacher teacher = new Teacher("张老师");  teacher.getStudents().add(student3);  teacher.getStudents().add(student2);  teacher.getStudents().add(student1);  this.teacherDao.save(teacher);  }  

2、inverse,英文意思是反向,反转。在这里可以理解为控制反转,也就是说实体间的关系由谁控制,所以inverse用在实体关联上。如OneToOne,OneToMany,ManyToMany 
     在OneToMany中,如果不指定inverse,那么hibernate会去找默认的表来维持关系。
     例如用老师和课程两个实体来说明,假设teacher和course是OneToMany的关系,
     配置如下:
     //通过外键teacher_id关联teacher,inverse通过mappedBy来设置

@ManyToOne(cascade={CascadeType.MERGE})  @JoinColumn(name = "teacher_id")  private Teacher teacher;  @OneToMany(mappedBy="teacher",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,CascadeType.REMOVE})  private Set<Course> courses = new HashSet<Course>(); 

在这里指定teacher的属性courses的关系由关联实体Course的teacher属性维持,如果不配置,则会去找
关联表teacher_course来维持关系。OneToOne和ManyToMany大同小异,这里不再累述!

(7) hibernate之级联cascade和关系维持inverse相关推荐

  1. [JAVAWEB实战篇]---Hibernate实现级联删除

    Hibernate实现级联删除 版权所有,转载请注明出处zhyiwww@163.com 我的使用背景: v有新闻和新闻类型,一条新闻只能属于一个类型,一种新闻类型可以对应多条新闻. v在数据库中,新闻 ...

  2. jpa级联添加_jpa级联(Cascade)操作

    由于 重复性的操作十分烦琐,尤其是在处理多个彼此关联对象情况下,此时我们可以使用级联(Cascade)操作.级联 在关联映射中是个重要的概念,指当主动方对象执行操作时,被关联对象(被动方)是否同步执行 ...

  3. Hibernate一对多/多对一关系映射详解及相应的增删查改操作

    以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...

  4. Hibernate对象与对象的关系

    hibernate对象与对象的关系,其实是对象与表的关系. 一.一对一 比如一个人对应一张身份证,一个门对应一把钥匙等- 在数据库中两张表,一张表的主键是通过引入另一张表的主键,建外键的关系 card ...

  5. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  6. hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) 主导方问题删除问题。

    hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)  ?? 多对一的关系 ,关系有一个主导方.主导方应该是one的 ...

  7. mysql cascade的用法_MySql和Hibernate中关于cascade的用法

    数据库里的cascade的用法,Mysql和Hibernate里面是不相同. 在数据库里,进行增加.修改.删除记录的时候,经常会涉及到父子关系的表. 例如:有省份表和城市表,其中城市表有一个外键pro ...

  8. Hibernate中的级联一对多关系

    两个pojo,Baby 和Baby File 对应数据库中表baby和babyfile.两个表有外键关联,且babyfile的外键不能为空 配置了个单向一对多,级联关系为save-update /** ...

  9. Hibernate @OneToMany 及 @Cascade级联操作

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:团队开发中的 Git 实践个人原创+1博客:点击前往,查看更多 作者:潘佳琦 链接:https://segmen ...

最新文章

  1. 21个令程序员泪流满面的瞬间
  2. 从 AlphaGo 到具有人类智慧的 AI 究竟有多远?Keras之父François Chollet告诉你
  3. prefixspan是挖掘频繁子序列,子序列不一定是连续的,当心!!!
  4. 《微软云计算Microsoft Azure部署与管理指南》即将上市!!!
  5. Ubuntu 如何为 XMind 添加快速启动方式和图标
  6. android studio打印日志语句Log.d()
  7. 网络对抗技术实验二,第一部分,第二部分
  8. pci简单通知控制器_船用LED航行灯及其控制器设计要点
  9. js数组操作大全(转)
  10. 分步表单_后台产品设计之表单页设计
  11. Jcreator教程
  12. C语言字母排序不分大小写,如何按字母顺序排序字符串数组(区分大小写,非标准排序规则)...
  13. Matlab之使用linearization估计人口数量
  14. 终生学习者,永远劳苦命!
  15. 导出数据库表信息生成Word文档
  16. 解决微信浏览器video标签自动播放视频失效
  17. 一、 网络安全基础入门-概念名词
  18. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
  19. 死定了!2020年,这6种将死的编程语言!
  20. 项目管理如何与甲方沟通

热门文章

  1. 【MS Word技巧】word如何批量把括号内字体变绿?
  2. 【Java数据结构】链表的增、删、返回指定位置元素(添加泛型)
  3. dart系列之:你的地盘你做主,使用Extension对类进行扩展
  4. ThreadLocal用法详解和原理
  5. kotlin学习之类(三)
  6. Leecode 260. 只出现一次的数字 III——Leecode每日一题系列
  7. 【四重优化,速看】剑指 Offer 13. 机器人的运动范围
  8. Web群集与日志管理Haproxy搭建
  9. Here Document和Expect概述(免交互,变量设定,控制,注释,)(shell里使用EOF报错)
  10. 五分钟学会企业的OpenStack(T版)——简介及安装方式