2012-09-14 16 views
10

Próbuję napisać odrębną kryteria zapytania, używając:Kryteria JPA Query odrębny

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

Opierając się na przykład w javadoc dla CriteriaQuery.select()

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

Jednak to daje mi błąd:

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

Czy ktoś może wskazać, co robię źle? Lub jak uzyskać obiekt Selection ze ścieżki?

Odpowiedz

38

Mam to. Problem polegał na tym, że mój CriteraQuery musiał być typu String. To działa:

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