У меня есть метод, который извлекает сущности, используя NamedQuery
. Я обновляю значение каждой сущности, а затем запускаю другой именованный запрос (в том же методе и Transaction
), фильтрующий по старому значению, и он возвращает те же сущности, как если бы я их не изменял.
Я понимаю, что EntityManager
необходимо сбросить, а также, что это должно происходить автоматически, но это не имеет значения.
Я включил ведение журнала в спящем режиме SQL и вижу, что сущности не обновляются, когда я вызываю flush, но когда транзакция контейнера фиксируется.
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