在我的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();
}
}
答案 0 :(得分:2)
最好的方法是将Spring Data包含到您的项目中。 JPA存储库提供基本的CRUD,分页和排序,您的大多数查询都可以通过方法命名约定自动构建。
在Spring Data之前,我们会使用这样的Generic Daos,但现在不再使用了。