2012-06-14 13 views
6

आपके पास प्राथमिक कुंजी के साथ एक विशिष्ट पंक्ति खोजने के लिए EntityManager.find(Class entityClass, Object primaryKey) विधि है।मुझे कॉलम में कोई मान कैसे मिल सकता है जिसमें EclipseLink के साथ अद्वितीय मूल्य हैं?

लेकिन मुझे ऐसे कॉलम में एक मूल्य कैसे मिल सकता है जिसमें अद्वितीय मूल्य हों और प्राथमिक कुंजी नहीं है?

उत्तर

5

उदाहरण के लिए, इस तरह:

List<T> results = em.createQuery("SELECT t FROM TABLE t", T.class) 
         .getResultList(); 

मानकों के साथ:

List<T> results = em.createQuery("SELECT t FROM TABLE t where t.value = :value1") 
         .setParameter("value1", "some value").getResultList(); 

एकल परिणाम के लिए getSingleResult() साथ getResultList() बदल देते हैं:

T entity = em.createQuery("SELECT t FROM TABLE t where t.uniqueKey = :value1") 
       .setParameter("value1", "KEY1").getSingleResult(); 

का एक दूसरा तरीका मानदंड एपीआई का उपयोग करने के लिए है ।

+2

आपके उत्तर के लिए धन्यवाद। मुझे पता था कि मैं इसे एक प्रश्न के साथ कर सकता था, मैं बस सोच रहा था कि क्या मैं जेपीए की विधि का उपयोग कर कम कोड के साथ तेज़ी से कर सकता हूं, जैसे 'EntityManager.find() '। – Rox

7

आप उपयुक्त जेपीक्यूएल TypedQuery के साथ उपयोग कर सकते हैं।

try { 
    TypedQuery<Bean> tq = em.createQuery("from Bean WHERE column=?", Bean.class); 
    Bean result = tq.setParameter(1, "uniqueKey").getSingleResult(); 
} catch(NoResultException noresult) { 
    // if there is no result 
} catch(NonUniqueResultException notUnique) { 
    // if more than one result 
} 
+0

धन्यवाद! मैंने पहले TypedQuery का उपयोग नहीं किया है। मैं इसकी जांच करुँगा! – Rox

2

आप क्वेरी, या तो जेपीक्यूएल, मानदंड या एसक्यूएल का उपयोग कर सकते हैं।

यह सुनिश्चित नहीं है कि आपकी चिंता कैश हिट प्राप्त करने में है()। EclipseLink 2.4 कैश इंडेक्स में आपको गैर-प्राथमिक कुंजी फ़ील्ड इंडेक्स करने और जेपीक्यूएल या मानदंड से कैश हिट प्राप्त करने की अनुमति देने के लिए जोड़ा गया था।

देखें, पहले 2.4 करने के लिए http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Indexes

आप में स्मृति प्रश्नों का उपयोग गैर आईडी खेतों पर कैश क्वेरी करने के लिए कर सकता है।