0 0

JPA 一对多级联更新时,不能级联删除.30

级联新增,删除都ok;
级联更新时,修改从表内容的update,新增也ok,就是删除不ok.

以下贴出代码部分,望大家能够指点.

public class Account implements java.io.Serializable
{
    private String id;
    private String name;
    private String enabled;
    private Set<Acct2group> acct2groups = new HashSet<Acct2group>(0);

@OneToMany(cascade = CascadeType.ALL, mappedBy = "account")
    public Set<Acct2group> getAcct2groups()
    {
        return this.acct2groups;
    }

将Account类查出后,

Account account = dao.findById(1);
Set set = account.getAcct2groups();//此时set结果集为4
set.clear();
em.merge(account);

事务是spring控管的,做别的持久层动作都没问题.
就是不能将remove掉的4个Acct2group对象,重DB中删除.
将set.clear换成set.iterator().hasNext()迭代remove也不可以.

大家伙帮忙看看啊.

问题补充:
kamhung 你好,
我用的是hibernate,org.hibernate.annotations.CascadeType没有DELETE_OPTION这个属性啊.只有DELETE和DELETE_ORPHAN.我两个都试了一下,都没有达到删除孤子的效果啊,还望再次帮助.
DAO 
2008年7月22日 16:42

4个答案 按时间排序 按投票排序

0 0

采纳的答案

JPA规范是不支持级联删除, 不过一般实现方都会提供扩展功能来支持。
如果你用的是toplink实现包的话, 你就要实现一个DescriptorCustomizer 接口

public class AccountDescriptorCustomizer implements DescriptorCustomizer {

    public void customize(ClassDescriptor descriptor) throws Exception {
        OneToManyMapping mapping = (OneToManyMapping) descriptor.getMappingForAttributeName("acct2groups");
        if (mapping != null) mapping.setIsPrivateOwned(true);
    }
}
然后在persistence.xml 中properties节点下加入:
<property name="toplink.descriptor.customizer.包名.Account" value="包名.AccountDescriptorCustomizer"/>

最后Acct2group 中 @ManyToOne 属性cascade将CascadeType.ALL 改成 {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.MERGE}.

如果是hibernate的实现的话, 在@OneToMany
旁边加上: @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_OPTION)

2008年7月23日 13:23
0 0

可以这么做,

account.setAcct2grooups(null);
em.merge(account);

2008年7月23日 11:05
0 0

可以这么做,

account.setAcct2grooups(null);
em.merge(account);

2008年7月23日 11:04
0 0

你描述的这种需求不属于级联删除,属于hibernate中的级联删除孤子,在jpa里面没有。
只能手动删除

2008年7月22日 21:05

相关推荐

    10_JPA详解_JPA中的一对多双向关联与级联操作.zip

    总结,本资料包主要探讨了JPA中一对多双向关联的配置以及级联操作的使用,这些都是在实际开发中处理复杂对象关系时不可或缺的知识点。通过理解和熟练应用这些概念,开发者可以更加高效地管理数据库中的对象关系。

    JPA详解视频教程 第10讲 JPA中的一对多双向关联与级联操作.avi

    JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第10讲 JPA中的一对多双向关联与级联操作.avi

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

    3. **级联操作**:级联是指当对一个实体进行某些操作(如保存、删除)时,这些操作会自动传播到与其关联的其他实体。例如,如果我们设置级联类型为`CascadeType.ALL`,那么删除一个用户时,与之关联的所有订单也会被...

    spring jpa操作数据库 级联数据 hibernate

    例如,`@OneToMany`和`@ManyToOne`用于表示一对多或多对一的关系,级联操作如`CascadeType.PERSIST`、`CascadeType.MERGE`等可以确保当一个实体被保存或更新时,与其关联的实体也会相应更新。这在处理关联数据时非常...

    JPA中的一对多双向关联与级联操作

    级联操作是JPA提供的一种特性,允许开发者指定当一个实体被持久化、更新、删除时,其关联的实体应该如何处理。这可以通过`CascadeType`枚举在`@OneToMany`注解中设置。例如,如果我们希望当用户被删除时,所有相关的...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **级联操作**: 支持在实体之间定义级联操作,如删除一个实体时自动删除与之关联的其他实体。 - **延迟加载**: JPA的懒加载机制使得关联的对象只有在真正需要时才从数据库加载,提高性能。 **3. Hibernate JPA ...

    07_JPA详解_使用JPA加载_更新_删除对象.zip

    本教程将深入讲解如何使用JPA进行对象的加载、更新和删除操作。 ### 1. JPA基本概念 #### 1.1 Entity(实体) 在JPA中,实体代表数据库中的表,通过在Java类上使用`@Entity`注解来标识。每个实体类对应一个数据库...

    jpa例子jpajpa

    它可以负责实体的持久化、查询、更新和删除等操作。 4. **查询(Query)**: JPA提供了两种查询方式:JPQL(Java Persistence Query Language)和 Criteria API。JPQL是一种面向对象的查询语言,类似SQL,但操作的是...

    Hibernate JPA

    ### Hibernate JPA 知识点详解 #### 一、Hibernate JPA 概述 **Hibernate**作为当前最为流行的对象关系映射(Object Relational Mapping, ORM)框架之一,在Java开发领域占据着举足轻重的地位。它最早实现了**Java...

    10_传智播客JPA详解_JPA中的一对多双向关联与级联操作

    级联操作是JPA提供的另一个强大功能,它允许我们在操作一个实体时自动处理与其关联的其他实体。JPA提供了多种级联类型,如`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。例如,如果设置为`...

    hibernate-jpa-2.1-api-1.0.2.Final-API文档-中英对照版.zip

    赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...

    MySQL使用外键实现级联删除与更新的方法

    `CASCADE`表示级联操作,即删除或更新主表记录时,相应的子表记录也会被删除或更新。`RESTRICT`或`NO ACTION`则阻止在子表有相关记录时删除或更新主表记录,而`SET NULL`会在主表记录被删除或更新时,将子表对应字段...

    hibernate-jpa-2.1-api-1.0.2.Final-API文档-中文版.zip

    赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...

    实体Bean之间的级联关系

    实体Bean之间的级联关系是Java持久化框架如Hibernate或JPA中的一个重要概念,它涉及到...此外,如果不正确地设置级联,可能会意外删除或更新不应该受影响的关联数据,所以需要在设计时充分考虑数据的完整性和业务逻辑。

    Apress.Pro.JPA.2.2nd.Edition.Oct.2013

    《Apress.Pro.JPA.2.2nd.Edition.Oct.2013》是一部关于Java持久化API(Java Persistence API,简称JPA)的专著,由Apress出版社于2013年10月出版。这本书是JPA 2.2版本的详细指南,旨在帮助开发者深入理解和有效利用...

    spring-data-jpa-2.0.9.RELEASE-API文档-中文版.zip

    赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    07_传智播客JPA详解_使用JPA加载_更新_删除对象

    本课程"07_传智播客JPA详解_使用JPA加载_更新_删除对象"将深入讲解JPA在加载、更新和删除对象方面的应用。 首先,让我们了解一下JPA的基本概念。JPA通过实体类(Entity Class)来映射数据库表,实体类中的属性对应...

    JPA全套技术代码.rar

    5. **生命周期回调(Lifecycle Callbacks)**: 支持在实体的生命周期事件(如创建、更新、删除)中执行自定义逻辑。 6. **缓存(Caching)**: 提供一级缓存(实体管理器内部)和二级缓存(可选,跨会话)以提高性能...

Global site tag (gtag.js) - Google Analytics