как сохранить в @Transactional, используя менеджер общих сущностей - PullRequest
0 голосов
/ 20 мая 2019

Я использую менеджер сущностей для работы с БД, Первоначально я выполнял очень глупую работу, чтобы выполнить свою работу, это вызвало у меня очень серьезную проблему с сервером, прекратившую получать соединение 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

Пожалуйста, исправьте, если я здесь что-то не так, а также дайте оптимальное решение. заранее спасибо ...

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