gpt4 book ai didi

java - 如果我删除了一个不管理此关联的实体,是否有办法让 Hibernate 处理删除 @ManyToMany 关联中的条目?

转载 作者:行者123 更新时间:2023-11-30 10:08:45 25 4
gpt4 key购买 nike

如果我删除了一个不管理此关联的实体,是否有办法让 Hibernate 处理删除 @ManyToMany 关联的 JoinTable 中的条目?

据我了解,如果我有这样的@ManyToMany 关联:

@Entity
public class AlertConfigurationVersion {

@JoinTable(
name = SUBJECT_ALERTCONFIGURATION_VERSION_TABLE,
joinColumns = @JoinColumn(name = "alert_configuration_version_id"),
inverseJoinColumns = @JoinColumn(name = "subject_id")
@ManyToMany(cascade = {
CascadeType.DETACH,
CascadeType.MERGE,
CascadeType.REFRESH,
CascadeType.PERSIST})
private Set<Subject> subjects = new HashSet<>();
}

然后,如果我删除一个 AlertConfigurationVersion,@ManyToMany 表将针对指向它的任何 Subject 正确更新。

但在我的例子中,我正在删除一个 Subject(使用标准存储库方法),现在我得到一个讨厌的 org.hibernate.exception.ConstraintViolationException/p>

org.postgresql.util.PSQLException: ERROR: update or delete on table "subject" violates foreign key constraint "fks123x93urj80014yg4vem4h43" on table "subject_alertconfigurationversion"
Detail: Key (id)=(9b915613-f37d-45c2-8fd8-8da4f9291aea) is still referenced from table "subject_alertconfigurationversion".

我可以让 Hibernate 以某种方式处理这种情况吗?理想情况下,不要使这种关联成为双向的,因为没有业务逻辑需要这样做。不过,我认为这并不重要。

我正在使用 Lombok 生成哈希码和等号,但我也尝试根据 https://dev.to/alagrede/why-i-dont-want-use-jpa-anymore-fl 上的建议从这些中排除引用和/或 ID和 https://developer.jboss.org/wiki/EqualsAndHashCode?_sscc=t

相关:ManyToMany with cascade all only cascading one way ,虽然这是 5 年前的事,并没有引起太多关注,但现在甚至那时可能会有一些方法。

另一个相关问题:Hibernate many-to-many cascading delete ,我通过复制 jointables 尝试了最佳答案中的“hack”,但这导致了所有其他类型的问题,Vlad Mihalcae 特别说(在其他地方)不要这样做。

https://hibernate.atlassian.net/browse/HHH-12239 上还有一个关于 Hibernate 的未决问题这看起来像我的问题,所以它似乎被认为是一个错误,但我不是 100% 确定它适用于我的情况。这个问题是关于双向关联的。

最佳答案

Subject 实体不知道此关联时,Hibernate 如何从 SUBJECT_ALERTCONFIGURATION_VERSION_TABLE 中删除关联行?

解决此问题的唯一方法是使用基于 FK 的 CASCADE ON DELETE:

ALTER TABLE SUBJECT_ALERTCONFIGURATION_VERSION_TABLE
ADD CONSTRAINT fk_alert_configuration_version_subject_id
FOREIGN KEY (subject_id) REFERENCES subject
ON DELETE CASCADE

关于java - 如果我删除了一个不管理此关联的实体,是否有办法让 Hibernate 处理删除 @ManyToMany 关联中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643458/

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