【问题标题】:ORA-02292: integrity constraint violated - child record found - fetchType issue? [duplicate]ORA-02292: 违反完整性约束 - 找到子记录 - fetchType 问题? [复制]
【发布时间】:2019-08-06 22:35:19
【问题描述】:

我在从具有多个子实体的表中删除时遇到了一个小问题。

我有一张名为 UNIVERSITY 的桌子和一张名为 STUDENT 的桌子。

@OneToMany(mappedBy = "university", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Student> studentList = new ArrayList<>();

@ManyToOne(fetch = FetchType.EAGER)
private University university;

我想从大学表中删除一行:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void deleteFromUniveristy(Long id) {
    em.createNamedQuery(University.DELETE_BY_ID)
            .setParameter("id", id)
            .executeUpdate();
}

@NamedQuery(name = University.DELETE_BY_ID, query = "delete from University uu where uu.id =:id")

但是收到错误信息:

java.sql.SQLIntegrityConstraintViolationException: ORA-02292: integrity constraint violated - child record found

我不明白,orphanRemoval = true 并且给定的 CascadeType 不能保证这种删除可能吗?

谢谢!

【问题讨论】:

  • 大学表没有任何字段可以作为任何其他表的外键,对吧?因为如果是这样,那么您必须先删除此类条目。
  • 有没有办法在删除父实体的同时自动删除所有子实体?

标签: java hibernate jpa spring-data-jpa jpql


【解决方案1】:

可以使用entityManager.remove(entity) 方法删除带子的父级。级联在删除 JPQL 时不起作用。

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 2019-03-16
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2012-07-02
    • 2020-04-08
    • 2016-04-13
    • 2019-12-31
    相关资源
    最近更新 更多