2016-08-25 39 views
-1

有沒有辦法將規範轉換爲org.hibernate.Criteria?將規範轉換爲條件

我有服務A生產規範(我不能修改它),我不得不消費這個規範來生成FORWARD_ONLY ScrollableResults,這是尚未支持的規範 - 有沒有辦法做到這一點?

回答

0

規格接口有,你可以用它來

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); 
} 

一個toPredicate方法然後你的代碼看起來像這樣(未測試):

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); 
+0

通過'Criteria'我指的是舊的組織.hibernate.Criteria,而不是CriteriaBuilder – zibi