【问题标题】:Deleting JPA object fails due to foreign key constraints?由于外键约束,删除 JPA 对象失败?
【发布时间】:2011-04-07 08:39:05
【问题描述】:

为什么以下查询会由于外键约束而失败?我没有其他方法可以删除我知道的相关数据。

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

我认为导致问题的违规关系是activationKey 字段:

2029 [main] ERROR org.hibernate.util.JDBCExceptionReporter - integrity
constraint violation: foreign key no action; FKCEC6E942485388AB
table: ACTIVATION_KEY

这就是我现在拥有的:

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private long id = 0;

    @ElementCollection
    @Column(name = "activation_key")
    @CollectionTable(name = "activation_key")
    private Set<String> activationKey = new HashSet<String>();
}

【问题讨论】:

    标签: java hibernate orm jpa jpa-2.0


    【解决方案1】:

    为什么以下查询会由于外键约束而失败?

    看起来您的批量删除查询并未从集合表中删除条目,因此违反了 FK 约束。

    虽然 JPA 规范明确规定批量删除不会级联到相关实体:

    4.10 批量更新和删除操作

    ...

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

    这不完全是你的情况,我认为你想做的应该得到支持。

    您可能面临 Hibernate 批量删除的限制之一,例如:

    我建议提出一个问题。

    解决方法:使用原生查询删除集合表,然后删除实体表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2021-09-03
      • 2021-05-09
      相关资源
      最近更新 更多