Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是管理hibernate会话的好方法吗?_Hibernate_Session_Dao - Fatal编程技术网

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

这是管理hibernate会话的好方法吗?,hibernate,session,dao,Hibernate,Session,Dao,我正在寻找一种跨web应用程序管理hibernate会话的好方法。 我的问题是我不想在视图或API层中允许会话访问。 因此,我在抽象的BaseDao类中构建了以下方法。 方法 protected static Session getSession() { if(!session.isOpen()){ session = sessionFactory.openSession(); }else{ session.clear(); } r


我正在寻找一种跨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;
}
public IHibernateBean保存(IHibernateBean bean){
事务t=session.beginTransaction();
getSession().saveOrUpdate(bean);
t、 提交();
返回豆;
}
公共IHibernateBean getByPK(类1,长pk){
IHibernateBean hibernateBean=(IHibernateBean)getSession().get(class1,pk);
返回hibernateBean;
}

您可以使用通过
SessionFactory.getCurrentSession()
获得的上下文会话,请参阅


另请参见类型安全DAO实现的示例。

我将回应axtavt的回答。作为补充信息,如果您使用的是支持JavaEE的容器(如JBoss as),那么请使用由其管理的EntityManager。在JavaEE6中,使用CDI特别容易

@fatnjazzy:这绝对不好,因为会议没有结束。使用上下文会话通过隐式关闭会话来解决此问题。如果我们关闭会话,则在延迟获取时,会出现错误,表示会话已关闭,如何解决此问题?您是否支持多线程环境中的上下文会话?