Закрытие EntityManager после каждой операции db при использовании HikariCP

Я использую EntityManager вместе с HikariCP для операций с базой данных. Должен ли я закрывать диспетчер сущностей после каждой операции? Для каждого запроса выполняется только одна операция с базой данных.

@Autowired
@PersisitentContext(unitname="datasource2")
private EntityManager entityManager

function() {

entityManager.createQuery(......);

entityManage.close(); // Is this required???



}

person Aswin Av    schedule 12.10.2020    source источник


Ответы (1)


Да, вам нужно закрыть его перед возвратом из метода, который его создал. Обычный подход — встроить EM в блок try/catch/finally, вызвав em.close(); в окончательном случае.

person Umesh Sanwal    schedule 12.10.2020
comment
Экземпляр EntityManger не создается в функции. Он автоматически подключается и является переменной класса. - person Aswin Av; 12.10.2020
comment
Поскольку в этом случае контейнер создает EntityManager для нас, это означает, что контейнер отвечает за начало транзакции, а также за ее фиксацию или откат. Точно так же контейнер отвечает за закрытие EntityManager, поэтому его безопасно использовать без ручной очистки. Даже если мы попытаемся закрыть EntityManager, управляемый контейнером, он должен вызвать исключение IllegalStateException. - person Umesh Sanwal; 12.10.2020