Не нахожу добавленных через EntityManager объектов в текущей транзакции

Добрый день.
Есть код:
try (Transaction tx = persistence.createTransaction()) {
em = persistence.getEntityManager();
//Добавление сущности
Group group = metadata.create(Group.class);
group.setName(grName);
em.persist(group);
//Поиск сущностей по id
List foo = em.createQuery(“select e from sec$Group e where e.id = ?1”, Group.class).setParameter(1,group.getId()).getResultList();
//Поиск сущностей всех
List bar = em.createQuery(“select e from sec$Group e”, Group.class).getResultList();
tx.commit();
}

В данном случае List “foo” содержит новую добавленную запись (поиск производился по id).
List “bar”, который не имеет условий, тем не менее не содержит новую запись. При поиске по другим атрибутам (например, наименование), запись тоже не находится.
Почему поиск через EntityManager находит новые сущности только при поиске через id?

Почему поиск через EntityManager находит новые сущности только при поиске через id?

Потому что транзакция не завершена и этого экземпляра еще нет в БД.
Загрузка по id отдает еще незакомиченную сущность из персистентного контекста.
А загрузка по прочим критериям вызывает загрузку из БД, где вашей новой записи еще нет.

2 симпатии

Подскажите пожалуйста, это поведение уникально для реализации в Cuba platform или вообще для JPA Entity manager? Как еще можно обратиться к незакомиченным данным в персист контексте?

Это поведение характерно для ORM вообще.

Вы можете вызвать метод EntityManager#flush().
Он отправит изменения по всем новым и измененным сущностям в базу данных, при этом коммита еще не будет, транзакция останется открытой.
Но сущности должны быть готовы, например все обязательные поля уже заполнены.

1 симпатия