public ExamQuestionEx getInitialed(Integer quesId) {
ExamQuestionEx q = new ExamQuestionEx();
String hql = "from ExamQuestionEx where id = ? ";
/*List<ExamQuestionEx> list = this.getHibernateTemplate().find(hql,quesId);
if(list!=null&&list.size()>0){
q = list.get(0);
}else{
return null;
}*/
q = (ExamQuestionEx) this.getSession().get(ExamQuestionEx.class, quesId);
if(!Hibernate.isInitialized(q.getAnswers())){
Hibernate.initialize(q.getAnswers());
}
if(!Hibernate.isInitialized(q.getOptions())){
Hibernate.initialize(q.getOptions());
}
return q;
}
用
List<ExamQuestionEx> list = this.getHibernateTemplate().find(hql,quesId);
if(list!=null&&list.size()>0){
q = list.get(0);
}else{
return null;
}
替换
q = (ExamQuestionEx) this.getSession().get(ExamQuestionEx.class, quesId);
会报错
org.hibernate.HibernateException: collection is not associated with any session
上述方法为dao层方法。
spring的配置为:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="send*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="create*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="affectMethods" expression="execution(* com.buisoft.eit.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods"/>
</aop:config>
事务指向到service方法。
本文探讨了在Spring框架下使用Hibernate操作数据库时遇到的“collection is not associated with any session”异常。通过对比两种获取对象的方法,分析了事务管理与Session管理的关系,并提供了解决方案。
3150

被折叠的 条评论
为什么被折叠?



