Hibernate ManyToMany 防止删除实体删除关联

时间:2021-04-28 12:19:29

标签: java hibernate

我正在尝试删除实体而不删除多对多关系(不是引用的实体!)

@Entity(name = "Person")
public static class Person {

    @Id
    @GeneratedValue
    private Long id;
    
    //I want this data to be strictly read only! 
    //It's inserted, deleted and managed from referenced entity
    @JoinTable(
            name = "person_to_data",
            joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "data_id", referencedColumnName = "id"))
    private List<Data> datas;

}

生成的删除看起来像

delete 
from
    person_to_data
where
    person_id=?
    
delete 
from
    person 
where
    id=?

由于documentaion,这是一个有效的删除 https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#associations-many-to-many-unidirectional

参见示例 169:

通过简单地删除父端,Hibernate 可以安全地删除关联的链接记录,如下例所示: Example 169. 单向@ManyToMany 实体移除

Person person1 = entityManager.find( Person.class, personId );
entityManager.remove( person1 );

DELETE FROM Person_Address
WHERE  Person_id = 1

DELETE FROM Person
WHERE  id = 1

如果删除具有现有 mtm 集合条目的实体,我的目标是违反约束。我的数据库在 m-to-m 表中有 ON DELETE 约束,但由于执行了 person_id 删除,因此从未达到。

我看到了不同的可能方法:

  1. 将 ManyToMany anno 更改为 OneToMany。但是,使用JoinTable 集合关联删除仍然会生成(为什么?)
  2. 一些注释可以防止这种行为/强制约束?

0 个答案:

没有答案