Java 保存子类别时出现休眠异常

Java 保存子类别时出现休眠异常,java,hibernate,servlets,hibernate-criteria,Java,Hibernate,Servlets,Hibernate Criteria,我正在开发一个j2ee项目。在我的项目中,我想使用Hibernate标准保存产品子类别 这是我的servlet代码: try { if (req.getParameter("ccategory").equals("0")) { ProductCategory category = new ProductCategory();//saveing product category category.setName(req.getParameter("

我正在开发一个j2ee项目。在我的项目中,我想使用Hibernate标准保存产品子类别

这是我的servlet代码:

try {     
    if (req.getParameter("ccategory").equals("0")) {
        ProductCategory category = new ProductCategory();//saveing product category
        category.setName(req.getParameter("cname"));
        category.setStatus(status);
        HibernateSession.save(HibernateSession.getSession(), category);

    } else {

        ProductCategory category = HibernateSession.Load(ProductCategory.class, req.getParameter("ccategory"));
        ProductSubcategory productSubcategory = new ProductSubcategory();
        productSubcategory.setProductCategory(category);
        productSubcategory.setSubcategory(req.getParameter("cname"));
        productSubcategory.setStatus(status);
        HibernateSession.save(HibernateSession.getSession(), productSubcategory);
    }

    resp.sendRedirect("index.jsp");
} catch (Exception e) {
    e.printStackTrace();
}
这是我的会话代码方法:

public class HibernateSession {

    public static Session getSession() {
        Session session = Connection.NewHibernateUtil.getSessionFactory().openSession();
        return session;
    }

    public static void save(Session session, Object ob) {
        Transaction transaction = session.beginTransaction();
        session.save(ob);
        session.flush();
        transaction.commit();
        session.close();
    }
}
但是在保存子类别时,我遇到了一个错误

org.hibernate.HibernateException:非法尝试将代理与两个打开的会话关联


实际上,您需要在加载类别后添加session.close()方法

ProductCategory category = HibernateSession.Load(ProductCategory.class, 
req.getParameter("ccategory")); 
session.close(); 

该问题是由于创建了两个会话造成的。加载类别后,您尚未关闭会话。因此,在上面的代码中定义了解决方案

实际上,您需要在加载类别后添加session.close()方法

ProductCategory category = HibernateSession.Load(ProductCategory.class, 
req.getParameter("ccategory")); 
session.close(); 
该问题是由于创建了两个会话造成的。加载类别后,您尚未关闭会话。因此,在上面的代码中定义了解决方案