Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我删除了一个不管理该关联的实体,有没有办法让Hibernate处理@ManyToMany关联中条目的删除?_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

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

Java 如果我删除了一个不管理该关联的实体,有没有办法让Hibernate处理@ManyToMany关联中条目的删除?,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,如果我删除了一个不管理该关联的实体,有没有办法让Hibernate处理删除@ManyToMany关联的JoinTable中的条目 据我所知,如果我有这么多的联想: @Entity public class AlertConfigurationVersion { @JoinTable( name = SUBJECT_ALERTCONFIGURATION_VERSION_TABLE, joinColumns = @JoinCo

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

据我所知,如果我有这么多的联想:

@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<>();
}
我可以让Hibernate以某种方式处理这个问题吗?理想情况下,不需要通过使这种关联具有双向性,因为不需要这种业务逻辑。但我认为这并不重要

我正在使用Lombok生成hashcode和equals,但我也尝试根据和的建议从中排除引用和/或id

相关报道:虽然这是5年前的事了,没有得到太多的关注,但现在甚至那时可能会有办法

另一个相关问题:,我通过复制连接表尝试了顶部答案中的“hack”,但这导致了所有其他类型的问题,Vlad Mihalcae明确表示(其他地方)不要这样做


还有一个关于Hibernate的开放性问题看起来像是我的问题,所以它似乎被认为是一个bug,但我不能100%确定它是否适用于我的情况。问题是关于双向关联。

主体
实体不知道此关联时,Hibernate如何从
主体
版本表中删除关联行

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

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

有没有一种不需要在数据库上直接创建FK的方法?当向主体实体提供此关联的知识时,它将如何工作?Vlad我认为Hibernate将构建应用程序整个域模型的内存中模型,因此它将意识到,当有一个实体在多个关联中引用要删除的实体时,删除该实体时,它还需要更新该联接表。如果这样做更简单的话,我也愿意将其作为双向关联,但我尝试了这样做,但对我当时使用的代码没有任何影响。因此,最好在DB表级别解决这一问题。为什么你不想采取这种方法?对不起,我完全没有听到你的评论。在DB级别这样做可能是一种选择,我将对此进行讨论。不过,我们更愿意让Hibernate管理整个数据库。我在上读了你的博客,我想我们也可以通过在连接表实体中添加@OnDelete(action=OnDeleteAction.CASCADE)来实现同样的效果,但这似乎有点过分了。
ALTER TABLE SUBJECT_ALERTCONFIGURATION_VERSION_TABLE
ADD CONSTRAINT fk_alert_configuration_version_subject_id
FOREIGN KEY (subject_id) REFERENCES subject 
ON DELETE CASCADE