Класс MyDao имеет методы выполнения целых задач сохранения через Hibernate SessionFactory, он отлично работает.Нет сеанса Hibernate в @PostConstruct
я впрыснуть MyDao в MyService, как можно видеть выше, но когда @PostConstruct инициализации() метод вызывается после инъекции MyDao (отладки можно увидеть MyDao хорошо впрыскивается) получить следующее исключение Hibernate:
орг. 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());
}
...
}
ПУТЬ К РЕШЕНИЮ
Как @йогом рекомендовалось выше меня, я использовал 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'. Должен ли это быть конструктором или это метод, который вы вызываете из другого места? –