2009-11-22 13 views
60

का उपयोग करके जब मैं एक HQL क्वेरी लिखनेआदेश मानदंड एपीआई

Query q = session.createQuery("SELECT cat from Cat as cat ORDER BY cat.mother.kind.value"); 
return q.list(); 

सब कुछ ठीक है। हालांकि, जब मैं एक मानदंड

Criteria c = session.createCriteria(Cat.class); 
c.addOrder(Order.asc("mother.kind.value")); 
return c.list(); 

बारे में मैं एक अपवाद org.hibernate.QueryException: could not resolve property: kind.value of: my.sample.data.entities.Cat

मैं मानदंड और आदेश उपयोग करना चाहते हैं मिलता है, मैं कैसे "द्वारा आदेश" मेरे व्यक्त करना चाहिए?

+1

क्या आपके बिल्ली वर्ग और उसके मानचित्रण करता है हमशक्ल? –

उत्तर

97

आप mother.kind के लिए उपनाम बनाना होगा। आप ऐसा करते हैं।

Criteria c = session.createCriteria(Cat.class); 
c.createAlias("mother.kind", "motherKind"); 
c.addOrder(Order.asc("motherKind.value")); 
return c.list(); 
+0

session.createCriteria को –

8

यह मैपिंग देखे बिना निश्चित रूप से जानना मुश्किल है (@ जुहा की टिप्पणी देखें), लेकिन मुझे लगता है कि आप निम्नलिखित की तरह कुछ हैं:

Criteria c = session.createCriteria(Cat.class); 
Criteria c2 = c.createCriteria("mother"); 
Criteria c3 = c2.createCriteria("kind"); 
c3.addOrder(Order.asc("value")); 
return c.list(); 
4

साथ ही आप प्रकार में शामिल होने के लिए जोड़ सकते हैं:

Criteria c2 = c.createCriteria("mother", "mother", CriteriaSpecification.LEFT_JOIN); 
Criteria c3 = c2.createCriteria("kind", "kind", CriteriaSpecification.LEFT_JOIN); 
2

यह आपको sess.createCriteria के बाद क्या करना है हटा दिया गया है है:

CriteriaBuilder builder = getSession().getCriteriaBuilder(); 
CriteriaQuery<User> q = builder.createQuery(User.class); 
Root<User> usr = q.from(User.class); 
ParameterExpression<String> p = builder.parameter(String.class); 
q.select(usr).where(builder.like(usr.get("name"),p)) 
    .orderBy(builder.asc(usr.get("name"))); 
TypedQuery<User> query = getSession().createQuery(q); 
query.setParameter(p, "%" + Main.filterName + "%"); 
List<User> list = query.getResultList(); 
+0

बहिष्कृत किया गया है यह 'हाइबरनेट 5.2' के लिए उपयुक्त है। – Cryptor

संबंधित मुद्दे