В приведенном ниже примере кода есть два метода с аннотацией @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);
}
}