我想在我的 Web 应用程序中使用 Spring + Hibernate。我的应用程序是在没有 Spring 的情况下编写的。当调用“打开页面”操作时,我打开 Hibernate Session,将其存储在 Http Session 中并在我的 DAO 之间共享。当调用保存操作时,我使用旧会话开始事务。
但现在我想将我的旧 DAO 迁移到基于 HibernateDaoSupport 的 DAO。在这种情况下如何共享会话?如果我的 DAO 引用 beans.xml 中的一个 SessionFactory,它们会共享同一个会话吗?在这种情况下如何管理会话(打开新的或使用旧的)?
我已经编写了以下代码,但我得到了
org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话
在页面 System.out.println(obj.getCategory().getName());
public class CategoryObjectDAOSpringImpl extends HibernateDaoSupport implements CategoryObjectDAO {
@Override
public CategoryObject get(int id) throws Exception {
CategoryObject obj = getHibernateTemplate().get(CategoryObject.class, id);
System.out.println(obj.getId());
System.out.println(obj.getCategory().getName());
for (ObjAttrCommon objAttr : obj.getAttributes()) {
//objAttr.setSession(getSession());
System.out.println(objAttr.getId());
}
return obj;
}
奇怪的是,如果我添加
getSessionFactory().openSession();
在顶部打电话我有同样的例外。