- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当 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");
Caused by: java.sql.SQLException: integrity constraint violation: foreign key no action; FKCEC6E942485388AB table: PERSON_EMAIL
如果它可以是纯 JPA 注释而不是 Hibernate 注释,那将是一个奖励!
最佳答案
我将让您解释 JPA 2.0 规范中提到批量删除操作不是级联的部分:
4.10 Bulk Update and Delete Operations
...
A delete operation only applies to entities of the specified class and its subclasses. It does not cascade to related entities.
事实上,Hibernate 也不会将删除级联到集合表。这已在 HHH-5529 中报告并且建议的方法是:
You could also (a) clean up the collection table yourself or (b) use cascading foreign keys in the schema.
换句话说,(a) 使用 native SQL 或 (b) 在数据库级别使用级联删除约束 - 您必须手动添加它,我不认为您可以使用@OnDelete
使用 @ElementCollection
注释(与 HHH-4301 IMO 相同)。
关于java - 使用元素集合时如何在 JPA 中进行批量删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903202/
我是一名优秀的程序员,十分优秀!