Java 如果我删除了一个不管理该关联的实体,有没有办法让Hibernate处理@ManyToMany关联中条目的删除?
如果我删除了一个不管理该关联的实体,有没有办法让Hibernate处理删除@ManyToMany关联的JoinTable中的条目 据我所知,如果我有这么多的联想: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
@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