2012-06-04 12 views
5

मैं निम्नलिखित इकाई वर्ग हैमैं जेपीए में काम करने के लिए हाइबरनेट फ़िल्टर कैसे प्राप्त करूं?


@Entity 
@FilterDef (name = "byLastName", parameters = @Parameter (name = "lastName", type="string")) 
@Filters ({ 
    @Filter (name = "byLastName", condition = "lastName = :lastName") 
}) 
public class User { 
    String firstName; 
    String lastName; 
}

मेरी डीएओ में मैं यह कर:


public User findById (Long id) 
{ 
    Session s = (Session) em.getDelegate (); 
    s.enableFilter ("byLastName").setParameter ("lastName", "smith"); 

    User u = em.find (User.class, id); 
    return (u); 
}

अब, अगर मैं इस को सही ढंग से समझ रहा हूँ, फिल्टर लागू किया जाना चाहिए, और किसी भी उपभोक्ता के पास यह अगर मैं अंतिम नाम "स्मिथ" के बराबर नहीं होता तो मैं पुनः प्राप्त करने की कोशिश करता हूं। समस्या यह है कि फ़िल्टर लागू नहीं होते हैं। किसी भी उपयोगकर्ता जिसे मैं डेटाबेस से पुनर्प्राप्त करने का प्रयास करता हूं, भले ही अंतिम नाम के मान को वापस कर दिया जाए।

क्या मैं गलतफहमी करता हूं कि फ़िल्टर कैसे काम करते हैं? या क्या मुझे कुछ याद आ रहा है कि मैंने यह कैसे कॉन्फ़िगर किया है? ध्यान दें कि मैं hibernate.cfg.xml का उपयोग नहीं कर रहा हूं; जेपीए और एनोटेशन का उपयोग करके सबकुछ मेरे लिए कॉन्फ़िगर किया गया है।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद।

उत्तर

5

फ़िल्टर ids द्वारा देखने के किसी भी रूप को प्रभावित नहीं करते हैं। यह एक-एक-एक और सटीक कारण भी है क्योंकि कई से एक संगठन फ़िल्टर नहीं किए जा सकते हैं।

+0

यह मेरी समस्या प्रतीत होता था, जब मैंने कोड को बदले में एक प्रश्न का उपयोग करने के लिए बदल दिया, तो यह एक चैंप की तरह काम करता था। मैंने वास्तव में गहराई से इसके बारे में सोचा नहीं था (मैं वास्तव में हाइबरनेट फ़िल्टर चीज़ के लिए नया हूं), लेकिन मुझे लगता है कि यह फ़िल्टर करने के लिए कुछ डिग्री समझता है जब आपके पास पहले से किसी दिए गए ऑब्जेक्ट की आईडी होती है। मुझे साफ - साफ समझाने के लिए धन्यवाद – Steve

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