使用Element Collections时如何在JPA中进行批量删除?

Person对象包含使用@ElementCollection存储的数据时,我无法解决如何使用JPA批量删除Person对象的问题。 任何关于如何做到这一点的想法将非常感激。

@Entity @Table(name="at_person") public class Person implements Comparable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="id") private long id = 0; @Column(name="name", nullable = true, length = 128) private String name = ""; @ElementCollection @Column(name = "email") @CollectionTable(name = "person_email", joinColumns = @JoinColumn(name = "person_id")) private Set email = new HashSet(); } 

我目前正在做的是这个,并且它因外键约束错误而失败:

 Query query=em.createQuery("DELETE FROM Person"); 

引起:java.sql.SQLException:完整性约束违规:外键无动作; FKCEC6E942485388AB表:PERSON_EMAIL

如果它可以是纯JPA注释而不是Hibernate注释,那将是一个奖励!

我将让你解释JPA 2.0规范中提到批量删除操作没有级联的部分:

4.10批量更新和删除操作

删除操作仅适用于指定类及其子类的实体。 它不会级联到相关实体

事实是,Hibernate也不会将删除级联到集合表中。 这已在HHH-5529中报道,建议的方法是:

您还可以(a)自己清理收集表或(b)在架构中使用级联外键。

换句话说,(a)使用本机SQL或(b)在数据库级别使用级联删除约束 – 您必须手动添加它,我认为您不能将@OnDelete@ElementCollection注释一起使用(与HHH-4301 IMO相同的故事)。