2
Я получаю эту errprHibernate Session закрыт при использовании транзакционной аннотации класса DAO
org.springframework.orm.hibernate3.HibernateSystemException: Session is closed!; nested exception is org.hibernate.SessionException: Session is closed!
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:690)
at org.springframework.orm.hibernate3.SpringSessionSynchronization.translateException(SpringSessionSynchronization.java:160)
at org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:148)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:924)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:737)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622).
.....
Caused by: org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:993)
.............`
Моего DAO Класс
@Transactional
@Repository(value = "flightBookingDao")
public class FltBookingDao {
@Resource
private GenericDaoService genericDaoService;
public Flightbooking getFlightBookingObjByMmtid(final String mmtId) {
final String SQL_QUERY = "from Flightbooking where fbkMmtid = '" + mmtId + "'";
final List<Flightbooking> list = genericDaoService.executeNativeQuery(SQL_QUERY);
if ((list == null) || (list.size() == 0)) {
logger.debug("XXXX -- Getting null/empty flightBooking Object from DB -- XXXX");
return null;
} else {
return list.get(0);
}
}
@Service(value = "genericDaoService")
public class GenericDaoService extends HibernateDaoSupport {
public List<Object> executeNativeQuery(final String queryString) {
List<Object> list = null;
final Session session = this.getSession();
try {
final Query query = session.createQuery(queryString);
list = query.list();
} catch (final Exception e) {
LOGGER.error("XXX Error in executing query " + queryString + " XXX " + e);
} finally {
session.flush();
session.close();
}
return list;
}
}
Конфигурации (я просто добавить соответствующую конфигурацию что я считаю необходимым)
<property name="mappingResources">
<list>
<value>com/yyy/bus/pojo/Flightbooking.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.current_session_context_class">
${hibernate.current_session_context_class} // value is set to thread
</prop>
</props>
</property>
<context:component-scan base-package="com.yyy.bus.dao">
Можете ли вы выделить причину сделать это. И в чем проблема? –
Теперь должно быть ясно, надеюсь, что вы сможете помочь :) –
Теперь он кристально чист. Спасибо за вашу помощь. :) –