我注意到使用下面的JPQL查询时不会删除PersistentUser的子代。但是,如果我执行entityManager.remove(object)
,则会删除子项。这是预期的吗?为什么下面的JPQL查询也不执行级联删除?
@OneToMany(mappedBy = "persistentUser", cascade = CascadeType.ALL)
private Collection<PersistentLogin> persistentLogins;
...
@Override
@Transactional
public final void removeUserTokens(final String username) {
final Query query = entityManager.createQuery(
"DELETE FROM PersistentUser p WHERE username = :username");
query.setParameter("username", username);
query.executeUpdate();
}
答案 0 :(得分:9)
这是预期的,JPQL删除操作不会级联。从JPA 1.0规范:
4.10批量更新和删除操作
(...)
删除操作仅适用于 指定类的实体和 它的子类。 它没有级联 相关实体。