`

hibernate中collection该何时使用cascade

阅读更多

先说说cascade的取值:如果用save-update,只是对存储过程和更新过程级联,在删除数据的时候,引用表的外键为空,不做级联删除,而用delete的话时,在对父表操作时,同时级联所有的更新操作和删除操作,也就是说在删除父表时同时删除子表中引用父表pk做外键的项,但是和内存中不同步.all-delete-orphan可以和内存中数据做同步. 再说说应用场合:

BookType bookType = new BookType();

Book book1 = new Book();

 book1.setType(bookType);

 Book book2 = new Book();

book2.setType(bookType);

bookService.save(book1);

 bookService.save(book2);

先创建一个 “书本类” 的实例,再创建 2本书,都是属于这本书,保存这2本书,结果出错。为什么?因为没有把BookTpye保存,所以那2本书的类别字段就不能保存了。这时使用cascade就可以保存book的时候自动保存booktype。 当然,还有另一种应用场合,就是booktype是预定义的,不是用户新创建的。这个时候无论book的增加还是删除,都不应当影响booktype,因此不能增加cascade属性。在appfuse当中,user的定义:

        <set
            name="roles"
            table="user_role"
            lazy="false"
            cascade="save-update"
        >
由于role都是预定义的,所以这里使用cascade并不妥当,某些应用场合可能会造成异常。(在role重新保存的时候,可能会报id相同无法保存)

 

分享到:
评论

相关推荐

    优化Hibernate性能的几点建议

    例如,如果设置了`default-cascade="all"`,那么在保存或更新一个实体时,Hibernate会自动更新与该实体相关的所有关联对象的状态。这样不仅可以简化代码,还可以确保数据的一致性。 #### 七、监控并调整Hibernate的...

    Hibernate_容器映射技术笔记

    在Hibernate中,级联删除可以通过配置`&lt;set&gt;`或其他集合类型的标签实现,如`&lt;cascade&gt;`属性,但需要注意的是,直接使用Hibernate的`delete`方法可能会导致先查询再删除的过程,这并不高效。相比之下,使用HQL...

    hibernate中文参考文档

    2. **集合映射(Collection Mapping)**: Hibernate 支持List、Set、Map等多种集合类型的映射。 3. **多对一(One-to-Many)、一对多(Many-to-One)、多对多(Many-to-Many)关系映射**: Hibernate 提供了丰富的...

    hibernate set 集合映射

    在Hibernate的源代码中,`org.hibernate.collection.internal.PersistentSet`是用于持久化Set的实现。这个类继承自`PersistentCollection`,并实现了`org.hibernate.engine.spi.CascadingAction`接口,用于处理级联...

    Hibernate使用技巧汇总

    以上内容总结了Hibernate使用过程中的一些重要技巧和注意事项,包括配置文件的选择与使用、实体关系管理、延迟加载策略以及与Spring框架的集成等关键知识点。通过掌握这些技巧,开发者可以更高效地利用Hibernate框架...

    hibernate组件之间的关联

    在 Hibernate 中,使用 @ManyToMany 注解,可以指定中间表的字段和关系。@JoinTable 注解用于定义中间表的详细信息,包括表名、连接列等。 **级联操作(Cascading)** 级联操作允许在操作一个实体时,自动处理与其...

    Hibernate中文API

    6. **关联映射**:Hibernate支持一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)的关联映射,以及懒加载(Lazy Loading)、级联操作(Cascade)和集合缓存(Collection Cache...

    hibernate持久化技术详解.孙卫琴.代码2

    在Hibernate中,通常使用`@Id`注解来标记标识符字段,并可通过`@GeneratedValue`指定生成策略。 4. **持久化类(Persistent Class)**: 实体类必须是可序列化的,即实现`Serializable`接口,这样才能确保对象能够在...

    hibernate结构框架及组要实现类的深入分析

    **Hibernate 结构框架详解** Hibernate 是一款流行的 Java ORM(对象关系映射)框架,它允许开发者将数据库操作转化为对 Java 对象的操作,简化了数据库应用的开发。在深入分析 Hibernate 结构框架之前,我们先来...

    Hibernate教程19_关系映射案例二

    5. **懒加载与立即加载(Lazy Loading vs Eager Loading)**:理解Hibernate的懒加载机制,以及何时使用`@OneToMany(fetch=FetchType.LAZY)`或`@ManyToOne(fetch=FetchType.EAGER)`。 6. **级联操作(Cascade ...

    hibernate3.3.2 jar文件

    Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,大大简化了数据库编程。本篇将详细介绍Hibernate 3.3.2版本的相关知识点。 1. **对象关系映射(ORM)**:...

    Hibernate经典入门

    除此之外,Hibernate还提供了级联操作(Cascade)、懒加载(Lazy Loading)、集合映射(Collection Mapping)等功能。级联操作允许在一个对象的操作中影响相关联的对象,如级联保存或删除。懒加载是优化性能的手段,...

    Java.Persistence.with.Hibernate

    《Java Persistence with Hibernate》是Java开发领域中一本非常重要的书籍,专注于探讨如何使用Hibernate框架进行持久化操作。Hibernate是一款开源的对象关系映射(ORM)工具,它极大地简化了Java应用程序与数据库...

    hibernate配置要点详谈

    - 配置在一方,表示多的一方记录由Hibernate负责加载后存放在主控方的`Collection`类型属性中。 - **双向一对多**: - 需要在双方都进行配置,并且通常设置`inverse`属性来标识哪一方负责维护关联关系。 - **`...

    hibernate映射关系

    在实践中,根据业务需求,我们可能需要在映射关系中添加各种条件,如级联操作(`cascade`属性)、懒加载(`fetch`属性)、集合的初始大小(`@CollectionTable.sizeColumn`)等。理解并灵活运用这些特性能够帮助我们...

    Hibernate 相关映射关系

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细探讨Hibernate中的映射关系,主要包括实体之间的一对一、一对多、...

    hibernate多对多关联映射(双项关联)

    在Hibernate中,我们可以使用`@ManyToMany`注解来声明这种关系。 二、双向关联的配置 双向关联意味着两个实体类都可以直接访问对方的集合。例如,学生和课程的关系,学生可以选修多门课程,课程也可以被多名学生...

    hibernate 映射-一对多双向

    标题中的“hibernate 映射-一对多双向”指的是在Java Hibernate框架中处理数据库关系映射中的一对多关联关系,并且这种关联是双向的。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用Java对象来表示数据库...

Global site tag (gtag.js) - Google Analytics