Класс MyDao имеет методы для выполнения целых задач сохранения через Hibernate SessionFactory, он отлично работает.
Я ввожу MyDao в MyService, как видно выше, но когда метод @PostConstruct init() вызывается после введенного MyDao (при отладке я вижу, что MyDao хорошо введен), получаю следующее исключение Hibernate:
org.hibernate.HibernateException: сеанс не найден для текущего потока
Моя реализация сервиса.
@Service("myService")
@Transactional(readOnly = true)
public class MyServiceImpl implements MyService {
@Autowired
private MyDao myDao;
private CacheList cacheList;
@PostConstruct
public void init() {
this.cacheList = new CacheList();
this.cacheList.reloadCache(this.myDao.getAllFromServer());
}
...
}
СПОСОБ РЕШЕНИЯ
Как рекомендовал мне @Yogi выше, я использовал TransactionTemplate для получения одного действительного/активного сеанса транзакции, в этом случае я реализовал сквозной конструктор и отлично работает для меня.
@Service("myService")
@Transactional(readOnly = true)
public class MyServiceImpl implements MyService {
@Autowired
private MyDao myDao;
private CacheList cacheList;
@Autowired
public void MyServiceImpl(PlatformTransactionManager transactionManager) {
this.cacheList = (CacheList) new TransactionTemplate(transactionManager).execute(new TransactionCallback(){
@Override
public Object doInTransaction(TransactionStatus transactionStatus) {
CacheList cacheList = new CacheList();
cacheList.reloadCache(MyServiceImpl.this.myDao.getAllFromServer());
return cacheList;
}
});
}
...
}
public void MyServiceImpl
. Должен ли это быть конструктор или это метод, который вы вызываете откуда-то еще? - person Angelo Fuchs   schedule 22.11.2017