将规范转换为标准

时间:2016-08-25 09:42:33

标签: spring spring-data

有没有办法将规范转换为org.hibernate.Criteria?

我有服务A,它产生规范(我无法修改它),我必须使用此规范来生成FORWARD_ONLY ScrollableResults,这在规范中尚不支持 - 有什么方法可以做到吗?

1 个答案:

答案 0 :(得分:0)

规范界面有一个toPredicate方法,您可以使用

 public interface Specification<T> {

  /**
   * Creates a WHERE clause for a query of the referenced entity in form of a {@link Predicate} for the given
   * {@link Root} and {@link CriteriaQuery}.
   * 
   * @param root
   * @param query
   * @return a {@link Predicate}, must not be {@literal null}.
   */
   Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
}

然后你的代码看起来像这样(未经测试):

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<String> query = builder.createQuery(String.class);
Root<DomainObject> domainRoot = query.from(Customer.class);
Predicate predicate = DomainSpec.like('xyz').toPredicate(domainRoot , query, builder);
query = query.where(predicate);