【问题标题】:Is that a good approch to manage hibernate session?这是管理休眠会话的好方法吗?
【发布时间】:2011-02-02 15:57:37
【问题描述】:


我正在寻找一种跨 Web 应用程序管理休眠会话的好方法。 我的问题是我不想在视图或 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;
}

【问题讨论】:

    标签: hibernate session dao


    【解决方案1】:

    您可以使用通过SessionFactory.getCurrentSession() 获得的上下文会话,参见2.3. Contextual sessions

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

    【讨论】:

    • @fatnjazzy:这肯定不好,因为会话没有关闭。使用上下文会话通过隐式关闭会话来解决这个问题。
    • 如果我们关闭会话,然后在 LAZY fetching 时,它会报错说会话已关闭,如何解决?
    • 您是否支持多线程环境的上下文会话?
    【解决方案2】:

    我会回应 axtavt 的回答。作为附加信息,如果您使用支持 Java EE 的容器(如 JBoss AS),请使用由它管理的 EntityManager。在 Java EE 6 中,使用 CDI 尤其容易。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 2015-10-31
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多