`
周英能
  • 浏览: 187975 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

hibernate之级联cascade和关系维持inverse

 
阅读更多

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大同小异,这里不再累述!

 

分享到:
评论
1 楼 zizhengwang 2014-10-24  
文章介绍的很全面,帮助我解决了问题,谢谢

相关推荐

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    hibernate inverse和cascade的详细讲解

    ### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...

    Hibernate中cascade和inverse应用

    在 Hibernate 框架中,`cascade` 和 `inverse` 是两个重要的概念,它们主要用于管理对象之间的持久化关系,特别是涉及到一对一(one-to-one)、一对多(one-to-many)和多对多(many-to-many)关系时。这两个属性都...

    Hibernate中cascade与inverse属性详解.doc

    在Hibernate中,`cascade`和`inverse`是两个非常重要的属性,它们主要涉及到对象关系映射(ORM)中的数据同步和关联管理。首先,我们来分别解析这两个属性的含义和作用。 `cascade`属性用于控制当操作一个实体(如...

    hibernate_配置cascade_及all-delete-orphan.doc

    在使用Hibernate时,正确选择和配置cascade选项对于高效地管理和维护实体之间的关系至关重要。通过了解不同选项的特点和应用场景,开发人员可以更加灵活地应对各种业务需求,同时也能够有效地避免潜在的数据一致性...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    inverse和cascade使用阐述

    在IT领域,"inverse"和"cascade"是两个常见的概念,尤其在数据库设计、软件工程以及数据处理中。这两个术语通常与关系型数据库中的外键约束、对象关系映射(ORM)工具,以及某些编程框架的特性相关。下面将详细阐述这...

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    hibernate集合映射inverse和cascade详解.txt

    `inverse`和`cascade`属性是Hibernate集合映射中非常重要的概念,它们帮助开发者更灵活地控制实体之间的关系以及操作的级联行为。合理地使用这两个属性,不仅可以简化代码,还能提高程序的性能和健壮性。然而,不当...

    关于cascade和inverse属性[文].pdf

    在软件网络技术领域,尤其是在使用Hibernate这种对象关系映射(ORM)框架时,理解和正确使用`cascade`和`inverse`属性至关重要。这两个属性主要用于管理对象之间的关联关系,特别是如何在数据库中维护这些关系。 ...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    `inverse`属性是Hibernate中用于控制关联维护权的重要参数,它的主要作用在于确定关联关系的更新和删除操作由哪一方负责。默认情况下,关联的维护权在"多"端,即子实体,这意味着当子实体发生变化时,如增加、删除或...

    关联映射cascade,inverse讲解

    通过阅读和实践这些代码,你可以更深入地理解Hibernate的关联映射,掌握cascade和inverse的实际应用技巧。 总之,理解并熟练运用Hibernate的关联映射、cascade和inverse是提升Java持久化编程能力的关键步骤。它们...

    Hibenate cascade

    在Hibernate中,`cascade`和`inverse`是两个重要的概念,它们涉及到对象之间的关系管理和数据持久化。 **1. Hibernate Cascade** `cascade`属性主要用于控制对象间的级联操作。当在主对象上执行保存、更新、删除等...

    Hibernate常见问题

    3. **cascade和inverse的区别**:`cascade`关注的是对象之间的操作传递,而`inverse`关注的是关系的维护。`cascade`决定了一个对象的变更是否会影响到其他关联对象,`inverse`则决定了关系的维护责任在哪个对象。 4...

    3.Hibernate 03 表关系详细教案1

    总结,本教程详细介绍了Hibernate中表关系的映射,包括不同关系的配置、`Cascade`和`Inverse`属性的使用,以及如何在Java类和XML配置文件中实现这些映射。理解并掌握这些概念对于高效使用Hibernate进行数据库操作至...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    hibernate的多种映射关系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,消除了直接编写 SQL 的需要。在 Hibernate 中,映射关系是将数据库表与 Java 类之间的关联方式,使得对象模型可以与关系...

    hibernate xml

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者...理解`cascade`和`inverse`的概念,能够帮助我们更好地设计对象模型,避免数据同步的问题,同时,灵活运用级联操作可以简化业务逻辑。

Global site tag (gtag.js) - Google Analytics