【问题标题】:creating a generic DAO class for Hibernate为 Hibernate 创建一个通用的 DAO 类
【发布时间】:2014-08-16 08:08:01
【问题描述】:

在我的 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();
    }
}

【问题讨论】:

  • savesaveOrUpdate 的看似随意的使用对您没有任何好处。如果没有泛型,您也将求助于强制转换,这会引入运行时类型错误。我会认真考虑以通用方式重写这个类——如果可能的话,使用 JPA 标准查询。 List - 即 List 原始类型不应该在现代 Java 中出现。
  • 这里有一个非常相似的讨论...stackoverflow.com/questions/3573479/…

标签: java hibernate jpa spring-data dao


【解决方案1】:

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

在 Spring Data 之前,我们会求助于这样的 Generic Daos,但现在不会了。

【讨论】:

猜你喜欢
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多