首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用元素集合时如何在JPA中进行大容量删除?

问使用元素集合时如何在JPA中进行大容量删除?
EN

Stack Overflow用户
提问于 2010-10-11 02:34:59
回答 1查看 9.5K关注 0票数 16

当Person对象包含使用@ElementCollection存储的数据时,我很难解决如何使用JPA对Person对象进行大容量删除。对于如何做到这一点,我将不胜感激。

代码语言:javascript
复制
@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>();
}

我现在正在做的是这样做,如果出现外键约束错误,它会失败:

代码语言:javascript
复制
Query query=em.createQuery("DELETE FROM Person");

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

如果它可以是一个纯JPA注释,而不是Hibernate注释,那将是一个额外的好处!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-11 03:04:45

我将允许您解释JPA2.0规范中提到大容量删除操作不级联的部分:

4.10批量更新和删除操作 ..。 删除操作仅适用于指定类及其子类的实体。--它不级联到相关实体。

事实上,Hibernate也不会将delete级联到集合表。HHH-5529报告了这一点,建议的方法如下:

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

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

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3903202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档