когда именно создается экземпляр объекта сеанса при использовании аннотации @Transactional для метода? - PullRequest
0 голосов
/ 17 октября 2019

В приведенном ниже примере кода есть два метода с аннотацией @Transactional. У меня небольшая путаница в отношении создания объекта сеанса. Он использовал «sessionFactory.getCurrentSession ()» для получения текущего объекта сеанса и, в свою очередь, использовал свои методы для сохранения или получения объекта. Я знаю, что объект sessionFactory создается во время запуска приложения. Но когда именно в этом сценарии создается объект сеанса и сколько объектов сеанса будет создано, учитывая, что оба метода вызываются по отдельности, т. Е. Выполняются две разные транзакции T1 и T2.

пример кода:

//E1ServiceImpl

package com.service.impl;

@Service("e1Service")
public class E1ServiceImpl implements IE1Service {

  @Autowired
  private IE1Dao e1Dao;

  @Override
  @Transactional
  public E1 save(E1 e1) {
      return e1Dao.save(e1);
  }


  @Override
  @Transactional
  public E1 getE1ById(Integer id){
      return e1Dao.getE1ById(id);
  }
}

//E1DaoImpl

package com.dao.impl;

@Repository
@SuppressWarnings("unchecked")
public class E1DaoImpl implements E1Dao {

  @Autowired
  private SessionFactory sessionFactory;

  @Override
  public E1 save(E1 e1) {
      sessionFactory.getCurrentSession().persist(e1);
      return e1;
  }

  @Override
  public E1 getE1ById(Integer id){
      Query query = sessionFactory.getCurrentSession().createQuery("From E1 where id=:id");
      query.setParameter("id", id);
      List<E1> e1s = query.list();
      return CollectionUtils.isEmpty(e1s) ? null : (E1) query.list().get(0);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...