有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaGoogleAppEngine删除JPQL查询和级联

我注意到,在使用下面的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();
}

共 (1) 个答案

  1. # 1 楼答案

    这是预期的,JPQL删除操作不会级联。根据JPA 1.0规范:

    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.