代码之家  ›  专栏  ›  技术社区  ›  Jay

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

  •  12
  • Jay  · 技术社区  · 14 年前

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

    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>();
    }
    
    1 回复  |  直到 14 年前
        1
  •  13
  •   Pascal Thivent    14 年前

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

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

    4.10批量更新和删除操作

    ...

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

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

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

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