J'ai une méthode qui récupère les entités en utilisant un NamedQuery
. Je mets à jour une valeur de chaque entité puis exécute une autre requête nommée (dans la même méthode et Transaction
) en filtrant par l'ancienne valeur et elle renvoie les mêmes Entités que si je ne les avais pas modifiées.JPA NamedQuery ne prend pas les modifications apportées à l'entité modifiée
Je comprends que le EntityManager
doit être rincé et aussi que cela devrait se faire automatiquement mais cela ne fait aucune différence.
J'ai activé la journalisation SQL hibernate et je peux voir que les entités sont et non mises à jour lorsque j'appelle flush mais quand la transaction de conteneur est validée.
EntityManager entityManager = getPrimaryEntityManager();
MyEntity myEntity = entityManager.find(MyEntityImpl.class, allocationId);
myEntity.setStateId(State.ACTIVE);
// Flush the entity manager to pick up any changes to entity states before we run this query.
entityManager.flush();
Query countQuery = entityManager
.createNamedQuery("MyEntity.getCountByState");
// we're telling the persistence provider that we want the query to do automatic flushing before this
// particular query is executed.
countQuery.setParameter("stateId", State.CHECKING);
Long count = (Long) countQuery.getSingleResult();
// Count should be zero but isn't. It doesn't see my change above