【发布时间】: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