Является ли javax.persistence.EntityManager потокобезопасным - PullRequest
0 голосов
/ 28 марта 2019

Я использую EntityManager в мае слой Dao без @PersistenceContext, но метод Dao вызывает метод сервиса, который помечен как @Transactional.Мой вопрос заключается в том, должен ли я использовать EntityManagerFactory в слое дао и каждый раз получать EntityManager для обеспечения безопасности потоков или это уже обрабатывается?

Слой Dao:

@RequiredArgsConstructor
public class UserDaoImpl {

 private final EntityManager em;

 public void save(User user){
     em.persist(user);
 }
}

Сервисный слой:

@RequiredArgsConstructor
public class UserService {

 private final UserDao userDao;

 @Transactional
 public void save(User user) {
   userDao.save(user);
 }
}

Tnx!

Ответы [ 2 ]

1 голос
/ 28 марта 2019

просто добавьте @PersistenceContext в ваш Entity Manager, и контейнер обработает его для вас, но если вы не находитесь в среде JEE, создайте свою собственную фабрику менеджера сущностей, но я думаю, что в вашем текущем случае менеджер сущностей по-прежнему будет нулевым. Кроме того, вы должны создать свой XML-файл модуля персистентности и обратить внимание на тип транзакции. Это должно быть JTA, если вы используете @PersistenceContext, и это должно быть RESSOURCE_LOCAL, если вы создадите собственную фабрику Entity Manager.

0 голосов
/ 28 марта 2019

Этот вопрос о переполнении стека Действительно ли EntityManager поточно-ориентирован? уже получил ответ на ваш вопрос.

А вот этот « перспективный доступ к данным Java - шаблон DAO выполнен правильно » показывает, как проектировать уровень DAO.

Но если вы используете репозиторий Spring и Spring Data, я бы предложил определить репозиторий с использованием интерфейса CrusRepository или JpaRepository. Это сняло бы ваши опасения по поводу обработки EntityManager в Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...