Google App Engine - 删除JPQL查询和级联

Tay*_*ese 8 java google-app-engine jpa jpql google-cloud-datastore

我注意到使用下面的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();
}
Run Code Online (Sandbox Code Playgroud)

Pas*_*ent 9

这是预料之中的,JPQL删除操作不会级联.从JPA 1.0规范:

4.10批量更新和删除操作

(......)

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