Я заметил, что дочерние элементы 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();
}
Это ожидаемо, операция удаления в JPQL не каскадируется. Из спецификации JPA 1.0:
4.10 Операции массового обновления и удаления
(...)
Операция удаления применяется только к сущностям указанного класса и его подклассов. Она не каскадируется на связанные сущности.