小编典典

使用元素集合时,如何在JPA中批量删除?

hibernate

Person 对象包含使用 @ElementCollection 存储的数据时,我在解决如何使用JPA 批量删除 Person
对象方面遇到麻烦。任何有关如何执行此操作的想法将不胜感激。

@Entity
@Table(name="at_person")
public class Person implements Comparable<Person> {

    @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<String> email = new HashSet<String>();
}

我现在正在做的是,它因外键约束错误而失败:

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

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

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


阅读 770

收藏
2020-06-20

共1个答案

小编典典

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

4.10批量更新和删除操作

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

事实是,Hibernate也不会将删除操作级联到集合表。在HHH-5529中已对此进行了报告,建议的方法是:

您也可以(a)自己清理收集表,或(b)在模式中使用级联外键。

换句话说,(一)使用本地SQL或(b)在数据库级别使用级联删除约束-你必须手动添加它,我 不认为
你可以用@OnDelete@ElementCollection注释(同样的故事,HHH
-4301
IMO)。

2020-06-20