Google App Engine - УДАЛИТЬ JPQL Query and Cascading - PullRequest
8 голосов
/ 08 июня 2010

Я заметил, что дочерние элементы PersistentUser не удаляются при использовании запроса JPQL ниже. Однако дети удаляются, если я выполняю 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 Ответ

9 голосов
/ 08 июня 2010

Ожидается, что операция удаления JPQL не будет каскадной. Из спецификации JPA 1.0:

4.10 Операции массового обновления и удаления

(...)

Операция удаления применяется только к сущности указанного класса и его подклассы. Это не каскад связанным лицам .

...