У меня есть проект со многими услугами.Я использую чистый JPA с Джерси в моем проекте.
Я использую entityManager, entityTransaction и entityManagerFactory следующим образом: для каждого сервиса я получаю EntityManager из DBManager.getEntityManager () и получаю и entityTransaction из его entityManager
public class DBManager {
public static EntityManager getEntityManager() {
return Persistence.createEntityManagerFactory("projectDataSource").getEntityManager();
}
В каждом методе, которыйнужна транзакция, сначала я проверяю transaction != null
и транзакция не активна
Затем я начинаю транзакцию.
Я высвобождаю кеш и после всего этого я делаю свою работу: в этом примере я получаювсе активные пользователи из базы данных и мой сервис, который возвращает список пользователей клиенту.
Один из моих сервисов: @getUsersService
public class GetUsersServiceImpl {
private static EntityManager entiyManager = DBManager.getEntityManager();
private static EntityTransaction entityTransaction = entityManager.getTransaction();
public List<User> getUsers()
if (transaction != null && !transaction.isActive())
transaction.begin()
entityManager.getEntityMangerFactory().getCache().evictAll();
return entityManger.createQuery("SELECT u FROM USER u WHERE u.isActive = true").getResultList();
}
Этот код работает, но не всегда!
У меня есть другой сервис, который меняет пользователей;этот пользователь также работает и изменяет данные пользователя в базе данных, но после вызова службы изменений, когда я вызываю службу getUsers, он извлекает старые данные базы данных
Почему это происходит?
Правильно ли яиспользовать entityManager и entityTransaction ...