2012-09-14 15 views
10

Sto cercando di scrivere un distinto interrogazione criteri, utilizzando:JPA criteri di query distinti

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<RuleVar> query = builder.createQuery(RuleVar.class); 
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class); 
query.select(ruleVariableRoot.get("foo").<String>get("foo")).distinct(true); 

Sulla base della esempio nel Javadoc per CriteriaQuery.select()

CriteriaQuery<String> q = cb.createQuery(String.class); 
Root<Order> order = q.from(Order.class); 
q.select(order.get("shippingAddress").<String>get("state")); 

Tuttavia, questo dà un errore:

The method select(Selection<? extends RuleVar>) in the type CriteriaQuery<RuleVar> is not applicable for the arguments (Path<String>) 

Qualcuno può indicare per favore cosa sto facendo male? O come ottenere un oggetto Selection da un Path?

risposta

38

Ho capito. Il problema era che la mia CriteraQuery doveva essere di tipo String. Funziona:

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<String> query = builder.createQuery(String.class); 
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class); 
query.select(ruleVariableRoot.get(RuleVar_.varType)).distinct(true); 
Problemi correlati