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