2012-09-14 19 views
10

मैं का उपयोग कर, एक अलग मापदंड क्वेरी लिखने के लिए कोशिश कर रहा हूँ:जेपीए मानदंड क्वेरी अलग

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

CriteriaQuery.select() के लिए जावाडोक में उदाहरण के आधार पर

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

बहरहाल, यह देता है मुझे एक त्रुटि:

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

क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं? या पथ से चयन ऑब्जेक्ट कैसे प्राप्त करें?

उत्तर

38

मुझे मिल गया। समस्या मेरी CriteraQuery प्रकार स्ट्रिंग होने की आवश्यकता थी। यह काम करता है:

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