2016-08-25 4 views
-1

Gibt es eine Möglichkeit, die Spezifikation in org.hibernate.Criteria zu konvertieren?Die Spezifikation in Kriterien umwandeln

Ich habe Service A, der Spezifikation erzeugt (ich kann es nicht ändern) und ich muss diese Spezifikation verbrauchen, um FORWARD_ONLY ScrollableResults zu generieren, die noch nicht in der Spezifikation unterstützt wird - gibt es eine Möglichkeit, es zu tun?

Antwort

0

Die Spezifikation Schnittstelle hat eine toPredicate Methode, die Sie Ihren Code

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

dann wie folgt aussehen (nicht getestet) verwenden können:

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

von 'Criteria' meine ich die alten org .hibernate.Criteria, kein CriteriaBuilder – zibi

Verwandte Themen