Использование Hibernate 4 и Spring 3.1. Просто вставать и бегать с ним, так что это может быть недостаток понимания с моей стороны. У меня есть метод в классе Service, который вызывает метод в классе DAO для извлечения некоторых данных с помощью Hibernate. Я комментирую метод службы с помощью @Transactional, но получаю сообщение об ошибке при вызове метода getCurrentSession в методе DAO. Если я также аннотирую метод DAO с помощью @Transactional, то данные будут успешно восстановлены. Я не понимаю, почему, хотя я бы подумал, что аннотация @Transactional в методе службы создала сессию Hibernate, связала бы ее с потоком и что этот сеанс будет возвращен в классе DAO при вызове getCurrentSession. Может ли кто-нибудь объяснить, почему это так, или если я делаю что-то неправильно, спасибо?Ошибка «Сессия найдена для текущего потока» в DAO при маркировке Класс обслуживания как Транзакция
корня context.xml:
<tx:annotation-driven transaction-manager="transactionManager"/>
Класс обслуживания:
public class BlahServiceImpl implements BlahService {
@Transactional
public Blah GetMostRecentBlah() {
BlahDAO blahDAO = DAOFactory.GetBlahDAO();
return blahDAO.GetMostRecentBlah();
}
}
DAO класс:
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Blah GetMostRecentBlah() {
return (Blah)sessionFactory.getCurrentSession().createQuery("from Blah where blahID = (select max(blahID) from Blah)").uniqueResult();
}
Ошибка:
org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1039)
com.blah.blah.DAO.BlahDAOImpl.GetMostRecentBlah(BlahDAOImpl.java:18)
Как я уже сказал, если я комментирую функцию DAO с помощью @Transactioanl (а также метод службы), это работает, но я не понимаю, почему.
Не могли бы мы увидеть код, который вызывает услугу? –
И как выглядит ваш DAOFactory? –