为Hibernate创建一个通用的DAO类

时间:2014-06-25 16:34:23

标签: java hibernate jpa spring-data dao

在我的Web应用程序中,有很多实体,其中大多数都需要CRUD操作。所以我正在考虑编写一个可以为所有实体处理CRUD的通用DAO。我找到了IBM的教程文章,但并不完全理解使用泛型类型' T'和' PK'的通用实现。这篇文章是at this link

我在所有方法中使用Object类型编写了以下DAO,它们似乎工作正常 - 我的所有实体都可以使用以下CommonDao类进行CRUD。虽然它可以满足我的需求,但我正在寻找为Hibernate实现通用DAO类的最佳实践。

public class CommonDao
{
    private final static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

    public CommonDao() {}

    @UnitOfWork
    public List findAll(Object className)
    {
        List types = null;

        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(className + ".class");
        types = (List <Object>) criteria.list();
        session.close();

        return types;
    }

    @Transactional
    public void saveObject(Object obj)
    {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(obj);

        tx.commit();
        session.close();
    }

    @Transactional
    public void saveObjectWithManyEntities(Object obj, Set<Object> objects)   /* for OneToMany relationships */
    {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(obj);

        for (Object o : objects)
        {
            session.save(o);
        }

        tx.commit();
        session.close();
    }
}

1 个答案:

答案 0 :(得分:2)

最好的方法是将Spring Data包含到您的项目中。 JPA存储库提供基本的CRUD,分页和排序,您的大多数查询都可以通过方法命名约定自动构建。

在Spring Data之前,我们会使用这样的Generic Daos,但现在不再使用了。