这是管理hibernate会话的好方法吗?

时间:2011-02-02 15:57:37

标签: hibernate session dao


我正在寻找一种跨Web应用程序管理hibernate会话的好方法。 我的问题是我不想在视图或API层中允许会话访问。 所以我在我的抽象BaseDao类中构建了以下方法。 方法方法

protected static Session getSession() {
    if(!session.isOpen()){
        session = sessionFactory.openSession();
    }else{
        session.clear();
    }
    return session;
}

用法:

public IHibernateBean save(IHibernateBean bean) {
    Transaction t = session.beginTransaction();
    getSession().saveOrUpdate(bean);
    t.commit();
    return bean;
}

public IHibernateBean getByPK(Class<?> class1 , Long pk) {
    IHibernateBean hibernateBean = (IHibernateBean) getSession().get( class1 , pk );
    return hibernateBean;
}

2 个答案:

答案 0 :(得分:2)

您可以使用通过SessionFactory.getCurrentSession()获得的内容相关会话,请参阅2.3. Contextual sessions

另请参阅Generic Data Access Objects,了解类型安全DAO实现的示例。

答案 1 :(得分:0)

我回应了axtavt的回答。正如附加信息一样,如果您使用的是支持Java EE的容器(如JBoss AS),那么请使用由它管理的EntityManager。在Java EE 6中使用CDI特别容易。