java - 由于外键约束,删除 JPA 对象失败?

标签 java hibernate orm jpa jpa-2.0

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

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>();
}

最佳答案

Why would the following query fail due to a foreign key constraint?

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

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

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 批量删除的限制之一,例如:

我建议提出一个问题。

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

关于java - 由于外键约束,删除 JPA 对象失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627674/

相关文章:

java - 跨窗口复制数据以填充无限数量的点

java - 康威的生命游戏规则不适用

java - 实现 hashCode 和延迟加载

java - 跨方法的 Hibernate session 和事务

java - Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError : NULL Error

vb.net - 增强 'Rock, Paper, Scissors' 以在 VB.NET 中包含 'Lizard, Spock' 并使代码更具可扩展性、可维护性和可重用性

java - 当一个列表不稳定时如何比较两个列表的顺序

java - 失败后重置 Eclipselink JPA 实体管理器

java - 如何将 Hibernate 映射集加载为不可修改的集?

java - Spring Boot 自动配置无法与 spring-data-jpa 一起正常工作