我试图通过引用此article来使用Hibernate来使用通用DAO模式。
但是,GenericHibernateDAO类使用随后被弃用的Hibernate查询。我正在尝试使用该模式,但使用当前支持的JPA Criteria API更新它。但是,我正在努力解决如何在“findByCriteria”方法中“构建”查询。
这是使用旧标准类的文章的代码形式。
/**
* Use this inside subclasses as a convenience method.
*/
@SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion) {
Criteria crit = getSession().createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
}
目前,这是我目前尝试重新使用JPA Criteria API。
protected List<T> findByCriteria(Criterion... criterion) {
CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(getPersistentClass());
Root<T> root = criteria.from(getPersistentClass());
criteria.select(root);
// Not sure what to do here
for(Criterion c: criterion) {
criteria.where()
}
return session.createQuery(criteria).getResultList();
}
具体来说,原始代码使用Criterion在for循环中构建查询。据我了解,这将使该方法非常灵活。但是,我正在努力用JPA Criteria实现同样的效果。例如,根据我的理解,JPA Criteria API的使用要求已经知道有关查询的内容,例如WHERE子句是否涉及EQUAL TO,GREATER THAN或类似限制。我知道findByCriteria方法签名可能需要更改才能接受除Criterion之外的其他内容,但我不确定是什么。
我查看了Hibernate文档和其他在线资源,但没有发现任何与我正在寻找的内容相同的内容。
任何建议都将受到赞赏。