Я использую менеджер сущностей для работы с БД,
Первоначально я выполнял очень глупую работу, чтобы выполнить свою работу, это вызвало у меня очень серьезную проблему с сервером, прекратившую получать соединение JDBC после заполнения пула соединений.
Поэтому я решил пойти с менеджером общих сущностей, но теперь я застрял при сохранении сущности в базе данных с помощью транзакции при использовании менеджера общих сущностей ...
Дао выглядит ->
public List<Client> getClients()
{
List<Client> clist = new ArrayList<Client>();
entityManager =entityManagerFactory.createEntityManager();
try
{
clist = entityManager.createQuery("from Client").getResultList();
return clist;
}
catch (Exception e)
{
}
finally
{
entityManager.close()
}
}
Это приводит к созданию слишком большого количества подключений, и пул подключений переполняется и, следовательно, прекращает работу сервера.
Тогда я сослался -
https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa
раздел 13.5.2
поэтому я переключился на использование менеджера общих сущностей
написав код вроде -
DAO -
@PersistenceContext
private EntityManager entityManager;
public List<Client> getClients()
{
List<Client> clist = new ArrayList<Client>();
try
{
clist = entityManager.createQuery("from
Client").getResultList();
return clist;
}
catch (Exception e)
{
LOGGER.error(e.getMessage());
LOGGER.error(e.getStackTrace());
return clist;
}
}
Это работает, как и ожидалось, но во время постоянного получения ошибки,
метод сохраняющейся сущности ->
@Transactional
public void addNotification(Notifications noti)
{
try
{
getEntityManager().getTransaction().begin();
getEntityManager().persist(noti);
getEntityManager().getTransaction().commit();
// getEntityManager().persist(noti);
}
catch (Exception e)
{
LOGGER.error(e.getMessage());
LOGGER.error(e.getStackTrace());
}
finally
{
}
}
но здесь возникает исключение. Не разрешается создавать транзакции в совместно используемом EntityManager - вместо этого используйте транзакции Spring или EJB CMT
Пожалуйста, исправьте, если я здесь что-то не так, а также дайте оптимальное решение.
заранее спасибо ...