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

时间:2010-06-08 08:17:27

标签: java google-app-engine jpa google-cloud-datastore 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 个答案:

答案 0 :(得分:9)

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

  

4.10批量更新和删除操作

     

(...)

     

删除操作仅适用于   指定类的实体和   它的子类。 它没有级联   相关实体