我正在寻找一种跨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;
}
答案 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特别容易。