2012-05-17 13 views
7

मेरे पास दो इकाइयां हैं I.e व्यक्ति और गतिविधि। गतिविधि में संपत्ति की स्थिति होती है और व्यक्ति इकाई में गतिविधियों का संग्रह होता है। मैं उन लोगों की एक सूची प्राप्त करना चाहता हूं जिनके पास सभी गतिविधियों को 'पूर्ण' स्थिति है।हाइबरनेट संग्रह में बराबर सभी तत्वों की जांच

Criteria crit = s.createCriteria(Person.class); 
    crit.createAlias("activities", "act").add(Restrictions.eq("act.status","Done")); 

लेकिन यह स्थिति के साथ कम से कम एक गतिविधि के साथ सभी ऑब्जेक्ट को वापस कर देता है। मैं पूरी तरह से सेट की गई सभी गतिविधियों की स्थिति वाले व्यक्ति की सूची को पुनः प्राप्त करना चाहता हूं। क्या कोई मेरी मदद कर सकता है?

उत्तर

0

इसे अस्वीकार करने में सोचें। उन लोगों को पुनर्प्राप्त करें जिनके पास गतिविधियां हैं और कोई भी राज्य में Done से अलग नहीं है। फिर आप maxResults() या list.get(0) जोड़ सकते हैं (ध्यान रखें कि इसमें कोई व्यक्ति नहीं हो सकता है)।

1
// open hibernate session 
Query query = session.createQuery("Select p from Persons p inner join p.activities a where a.status = :code"); 
query.setParameter("code", "Done"); 
List results = query.list(); 

// close session 

for (int i = 0; i < results.size();){ 
    Person person = results.get(i); 
    List<Activity> activities = person.getActivities(); 
    for (int j = 0; j < activities.size(); j++){ 
    if (!activities.code.equals("Done")){ 
     results.remove(i); 
     break; 
    } // end if 
    } // end for j 
    i++; 
} // end for i 

यह चाल चलाना चाहिए। ध्यान दें कि यदि आपके पास आलसी लोड है, तो आपको अपनी हाइबरनेट क्वेरी में "fetch" कीवर्ड जोड़ने की आवश्यकता हो सकती है। यहाँ एक उपयोगी लिंक जुड़ जाता है के लिए है: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins

0

का तरीका यहां बताया मानदंड के साथ क्या कर सकते हैं: किंडा देर

Criteria crit = s.createCriteria(Person.class); 

DetachedCriteria sub = DetachedCriteria.forClass(Person.class); 
sub.createAlias("activities","act"); 
sub.add(Restrictions.ne("act.status","Done")); 
sub.setProjection(Projections.property("id"); 

crit.add(Property.forName("id").notIn(sub); 

लेकिन मुझे आशा है कि मैं कोई है जो अभी भी रूप में मैंने किया था इस के साथ संघर्ष में मदद कर सकते ।

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