hibernate之级联cascade和关系维持inverse

原创 2012年03月30日 12:59:06

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,

    配置示例

 

Java代码 复制代码 收藏代码
  1. @Cascade(value={org.hibernate.annotations.CascadeType.ALL})   
  2.     private StudentInfo studentInfo ;  
 

 

   1.2第二种注解是基于jpa规范,也就是apache jsr220规范,也是ejb3的持久层规范

javax.persistence.CascadeType

ALL, 

        PERSIST,调用session.persist()时触发 MERGE,调用session.merge()触发     REMOVE,调用session.delete()触发     REFRESH,      DETACH

    配置示例

 

Java代码 复制代码 收藏代码
  1. @ManyToOne(cascade={CascadeType.MERGE})   
  2.     @JoinColumn(name = "teacher_id")   
  3.     private Teacher teacher;  

 

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

  如下:teacher和student是ManyToMany,加上了cascade注解,便于测试

 

Java代码 复制代码 收藏代码
  1. @Test  
  2.     public void addStudentToTeacher(){   
  3.         Student student1 = new Student("张三",20,20072733L);   
  4.         Student student2 = new Student("李四",20,20072734L);   
  5.         Student student3 = new Student("王五",20,20072735L);   
  6.            
  7.         Teacher teacher = new Teacher("张老师");   
  8.         teacher.getStudents().add(student3);   
  9.         teacher.getStudents().add(student2);   
  10.         teacher.getStudents().add(student1);   
  11.         this.teacherDao.save(teacher);   
  12.     }  

 

2、inverse,英文意思是反向,反转。在这里可以理解为控制反转,也就是说实体间的关系由谁控制,所以inverse用在实体关联上。如OneToOne,OneToMany,ManyToMany 

     在OneToMany中,如果不指定inverse,那么hibernate会去找默认的表来维持关系。

     例如用老师和课程两个实体来说明,假设teacher和course是OneToMany的关系,

     配置如下:

     //通过外键teacher_id关联teacher,inverse通过mappedBy来设置

Java代码 复制代码 收藏代码
  1. @ManyToOne(cascade={CascadeType.MERGE})   
  2.     @JoinColumn(name = "teacher_id")   
  3.     private Teacher teacher;   
  4.   
  5. @OneToMany(mappedBy="teacher",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,CascadeType.REMOVE})   
  6.     private Set<Course> courses = new HashSet<Course>();  

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

hibernate annotation 注解

(1) 简介: 在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准。它非常强大、灵活,而且具备了优异的性能。在本文中,我们将了解如何使用Java 5 注释来简化Hib...
  • xingfeng0501
  • xingfeng0501
  • 2011年11月23日 21:49
  • 10419

详解Hibernate中cascade与inverse

学习hibernate的时候对级联关系的概念老是分不清楚,尤其是cascade、inverse傻傻分不清。下面通过例子来简单说明...
  • canot
  • canot
  • 2016年03月27日 13:04
  • 4959

Hibernate关于inverse与cascade属性的一些理解

1.inverse 网上关于inverse的理解大都是决定主表还是从表维护关系,但这实在有点抽象,经过进行实验观察sql语句终于有了一下理解。...
  • fengdl123
  • fengdl123
  • 2016年11月09日 14:59
  • 719

一口一口吃掉Hibernate(八)——Hibernate中inverse的用法

一、Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之...
  • xiaoxian8023
  • xiaoxian8023
  • 2013年11月20日 08:18
  • 36010

深入理解Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性,和注解版Hibernate实例

1.搞定Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性
  • he90227
  • he90227
  • 2014年07月28日 13:34
  • 6243

【Hibernate】详解Hibernate中的inverse=”true”

详解Hibernate中的inverse=”true”
  • LZGS_4
  • LZGS_4
  • 2015年05月19日 14:01
  • 3382

Hibernate之inverse和cascade详解

文章:Hibernate自学详细笔记     继Hibernate学习笔记整理之后,发现inverse和cascade这两个属性在配置过程中比较含糊,仔细比较一下是有些地方比较像,所以很容易搞糊涂。...
  • wangyang1354
  • wangyang1354
  • 2015年12月04日 14:41
  • 1370

hibernate之级联cascade和关系维持inverse

hibernate的关联关系,重点在理解级联cascade和inverse   1、cascade一般用在级联保存,级联更新,级联删除上      1.1cascade注解有两...
  • z69183787
  • z69183787
  • 2014年02月27日 10:32
  • 1317

hibernate面试题 --- Hibernate中最重要的属性cascade和inverse

Hibernate中最重要的属性cascade和inverse 一  cascade的介绍 (1)casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的casc...
  • hanxiaoshuang321123
  • hanxiaoshuang321123
  • 2011年12月22日 18:49
  • 731

hibernate级联(cascade和inverse)

级联(Cascade),两个以上的设备通过某种方式连接起来,能起到扩容的效果就是级联。Hibernate级联(Cascade)是用来说明数据库中连个表之间的相互关系(一对一,一对多,多对多)中,当对主...
  • t12x3456
  • t12x3456
  • 2012年06月11日 20:49
  • 2671
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate之级联cascade和关系维持inverse
举报原因:
原因补充:

(最多只允许输入30个字)