【发布时间】:2015-07-06 04:25:59
【问题描述】:
我正在开发一个非常大的、旧的 spring3、hibernate3 项目,我的任务是将其升级到 spring4 hibernate4。
显然 hibernate4 不再支持 HibernateTemplate,所以当我升级时,我们的客户端代码会中断。
我们所有的 DAO 都扩展了 HibernateDaoSupport 很多 DAO 代码如下所示:
public class ManagerDaoImpl extends HibernateDaoSupport implements ManagerDAO {
public List<Person> getManagers() {
List l = (List) this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
List result = (List) session.createQuery(MySqlQueryString).list();
return result;
}
});
return l;
}
//........
}
它是用 XML 连接起来的:
<bean id="managerDaoImpl" class="com.foo.bar.hibernate.ManagerDaoImpl">
<property name="sessionFactory" ref="MySessionFactory" />
</bean>
和
<bean id="MySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="configLocation" value="WEB-INF/hibernate.cfg.xml" />
</bean>
我认为我需要做的事情:
public List<Person> getManagers() {}
List result = (List) getSessionFactory().getCurrentSession.createQuery(MySqlQueryString).list();
return result;
return l;
}
但这给了我一个错误,例如:
Property 'sessionFactory' threw exception; nested exception is org.hibernate.HibernateException: No Session found for current thread
我做错了什么?
我认为不推荐使用 hibernateTemplate 的全部意义在于 Spring 3+ 可以为我处理事务?
我真的不认为升级此类常用技术的“阻力最小路径”方法会涉及到像会话会话和事务范围这样的操作。
【问题讨论】: