我正在尝试删除实体而不删除多对多关系(不是引用的实体!)
@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 删除,因此从未达到。
我看到了不同的可能方法: