gpt4 book ai didi

java - 当由于外键约束而无法删除父级时,Hibernate 不会删除父级但会删除子级(或关系)

转载 作者:行者123 更新时间:2023-11-30 22:43:00 26 4
gpt4 key购买 nike

我有一些实体(WarehouseTransactionGroup、WarehouseTransactionAttribute、AttributeValue)具有以下关系:

@Entity
public class WarehouseTransactionGroup extends MasterEntity {

@ManyToMany(cascade = CascadeType.ALL)
@MapKeyColumn
private Map<WarehouseTransactionAttribute, AttributeValue> attributes;

// Getter and setter

}

当我尝试删除 WarehouseTransactionGroup 类型的对象时,由于外键约束,它自然会失败,因为该对象在其他一些数据库记录中使用。但是,Hibernate 会清除属性字段中的数据。

我正在调用删除操作,即在事务中调用 session.delete()。

为什么会发生这种情况,我该如何解决?

最佳答案

shouldn't use CascadeType.ALL for @ManyToMany协会。

  1. 您需要将级联更改为CascadeType.PERSIST, CascadeType.MERGE:

    @ManyToMany(级联 = {CascadeType.PERSIST,CascadeType.MERGE}) @MapKeyColumn 私有(private) map 属性;

  2. 删除是这样的:

    WarehouseTransactionGroup wtg = ...;
    attributes.clear();
    em.remove(wtg);

关于java - 当由于外键约束而无法删除父级时,Hibernate 不会删除父级但会删除子级(或关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com