JSF2 + Hibernate 4 + Spring 3集成

时间:2013-08-19 06:13:49

标签: java spring hibernate jsf

嗨现在我在我的网络项目中使用JSF2+Hibernate,但我知道Spring是非常受欢迎且功能强大的框架(我是Spring新手)所以我想整合SpringHibernate4在我的项目中,所以我在谷歌寻找一些演示示例,但我注意到人们在会话初始化的代码下面使用的最多地方

public class UserDAO implements IUserDAO {

     private SessionFactory sessionFactory;

     /**
      * Get Hibernate Session Factory
      *
      * @return SessionFactory - Hibernate Session Factory
      */
     public SessionFactory getSessionFactory() {
      return sessionFactory;
     }

     /**
      * Set Hibernate Session Factory
      *
      * @param SessionFactory - Hibernate Session Factory
      */
     public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }

这是在每个SessionFactory课程中创建DAO对象的好方法吗?或者更好的方法来处理数据库连接?所以没有任何会话管理不善的机会。请帮我实施最好的方法。 感谢

2 个答案:

答案 0 :(得分:1)

  1. 添加BaseDAO
  2. 扩展您的每个DAO(扩展BaseDAO
  3. 仅将sessionFactory添加到BaseDAO并制作protected SessionFactory sessionFactory
  4. 您可以从sessionFactory扩展的所有DAO访问BaseDAO

    abstract public class BaseDAO {
       protected SessionFactory sessionFactory;
    
       public void setSessionFactory(SessionFactory sessionFactory) {
          this.sessionFactory = sessionFactory;
       }
    }
    
    public class UserDAO extends BaseDAO implements IUserDAO {
    ...
    }
    

答案 1 :(得分:0)

它会起作用。

@Transactional
    public class ProductDaoImpl implements ProductDao {
        private SessionFactory sessionFactory;

        @Resource
        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }

        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }

        public void save(Product product) {
            Session session = getSessionFactory().openSession();
            try {
                session.save(product);
            } finally {
                session.close();
            }
        }

    }