Hibernate - 将“遗留”标准翻译为JPA Critera以实现通用DAO

时间:2017-11-28 15:17:33

标签: java hibernate jpa

我试图通过引用此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文档和其他在线资源,但没有发现任何与我正在寻找的内容相同的内容。

任何建议都将受到赞赏。

0 个答案:

没有答案