2011-01-10 13 views
6

मैं एक बहुत ही सरल क्वेरी लिख रहा हूं, लेकिन मुझे किसी कारण से डुप्लिकेट मान मिल रहे हैं।हाइबरनेट, डुप्लिकेट मान प्राप्त करना

Criteria cr = session.createCriteria(ProcessInstance.class, "p") 
     .add(Restrictions.isNull("end")); 
@Cleanup ScrollableResults sr = cr.scroll(ScrollMode.FORWARD_ONLY); 

while (sr.next()) { 
    pi = (ProcessInstance) sr.get(0); 
    String id = pi.getId(); //Getting duplicate values 
} 

pi.getId() डुप्लिकेट मान देता है। अर्थात्: *9,9,10,10,11,11 etc*

हालांकि, mysql

SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL 

में सीधे इस क्वेरी चलाने डुप्लिकेट मानों वापस नहीं करता है।

क्या कोई भी गलत बता सकता है?

+0

आपके मैपिंग के बिना यह कहना मुश्किल है। – Matt

उत्तर

17

तेजी से कामकाज एक अलग रूट इकाई परिणाम ट्रांसफार्मर का उपयोग करना होगा।

... 
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 
List unique = crit.List(); 
... 

लेकिन यह केवल एक कार्यवाही है।

मुझे लगता है कि समस्या आपके मैपिंग से संबंधित है। यदि प्रोसेस इंस्टेंस से कुछ और लोड (1 इसे कॉल करें) से कोई उत्सुक भारित 1: n संबंध है, और एक प्रक्रिया के लिए कई (एन) एक्स हैं, तो आपको एक एकल के लिए परिणाम सूची में कई प्रक्रिया इंस्टेंस आइटम (एन) मिलेंगे ProcessInstance। - अगर यह वास्तव में कारण है, तो कामकाज की तुलना में सिर्फ एक कामकाज नहीं है, तो यह समाधान होगा।

+0

हाँ यह सही है। हमने उत्सुकता लाने के लिए मैपिंग बदल दी। धन्यवाद –

+0

इससे मदद नहीं मिली। हम अभी भी डुप्लिकेट प्राप्त करते हैं। क्या परिणाम ट्रांसफॉर्मर केवल सूची() के साथ काम करता है? हम स्क्रॉल का उपयोग कर रहे हैं। –

+0

आप मुझे गलत समझते हैं: समस्या तब हो सकती है जब संबंध अंडे लाया जाता है - इसे आलसी में बदलें। – Ralph

2

मैं तुम्हें रूप में एक ही समस्या encouter ..

इस तरह मैं इसे हल।

Criteria cr = session.createCriteria(ProcessInstance.class, "p") 
     .add(Restrictions.isNull("end")).setProjection("id") 

यह आपके सभी मानदंडों को पूरा करने वाली सभी आईडी लौटाएगा।

In प्रतिबंधों का उपयोग करने के बाद और CriteriaSpecification.DISTINCT_ROOT_ENTITY प्रदर्शन करने के बाद।

आप अपने परिणाम को दूसरे मानदंडों में स्क्रॉल करने में सक्षम होंगे .. मुझे आशा है कि यह सहायता होगी।

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