2011-05-30 7 views
7

जेपीए के माध्यम से एसक्यूएल मूल क्वेरी का उपयोग कर कुछ डेटा चुनते समय मुझे कुछ परेशानी हो रही है। ऐसा इसलिए है क्योंकि मेरे पास एक ही नाम, "descricao" के साथ 3 कॉलम हैं।जेपीए मूल क्वेरी का उपयोग कर एक ही नाम के साथ एकाधिक कॉलम का चयन कैसे करें?

जब मैं EntityManager इंटरफ़ेस का createNativeQuery विधि के माध्यम से चयन किए गए कार्य पूरे पहला स्तंभ मान ओवरराइड अन्य लोगों ने पाया।

(उदाहरण के लिए दिए गए रिकॉर्ड के पहले कॉलम अवरोही का मूल्य "foo", दूसरा "बार" और तीसरा "foobar" है, जब मुझे यह परिणाम ऑब्जेक्ट्स की एक सरणी में मिलता है (क्योंकि मैं ' टी ओआरएम ने इकाइयों को मैप किया), जहां कहीं भी कॉलम अवरुद्ध के दिए गए दूसरे और तीसरे मानों से भरा जाना चाहिए, पहले के मान से भरा हुआ है)

मुझे पूरा यकीन है कि ऐसा इसलिए है क्योंकि मैंने एक बार जेपीए का चयन किया है सीधे डेटाबेस पर सबकुछ ठीक से लौटता है।

पर्यावरण:

MySQL5; ईजेबी 3.0; जेपीए 1.0; जेबॉस 5.0.0GA; जेडीके 1.6;

SQL क्वेरी:

"select p.id, p.datapedido, b.descricao, prd.descricao, s.nome, 
      usuario.email, cc.chave_cupom, prd.nome, 
      ca.descricao, i.produto_id, i.valoritem, 
      hc.valor_utilizado, tp.datapagamento 
      ..." 

उत्तर

5

अदिश स्तंभ मैपिंग:

@SqlResultSetMapping(
     name="DescricaoColumnAlias", 
     columns={@ColumnResult(name="B_DESCRICAO"), 
       @ColumnResult(name="CA_DESCRICAO"), 
       @ColumnResult(name="PRD_DESCRICAO")} 
) 

स्तंभ मैपिंग में विनिर्दिष्ट अब देशी क्वेरी में स्तंभों के लिए अन्य नाम का उपयोग।

"B_DESCRICAO, PRD_DESCRICAO, s.nome, usuario.email, cc.chave_cupom, prd.nome, CA_DESCRICAO, मैं के रूप में ca.descricao रूप prd.descricao रूप p.id, p.datapedido, b.descricao का चयन करें। produto_id, i.valoritem, hc.valor_utilizado, tp.datapagamento ... "

परिणामसेटमैपिंग & क्वेरी निर्दिष्ट करके मूल क्वेरी बनाना।

entityManager.createNativeQuery(queryString, "DescricaoColumnAlias"); 
+0

धन्यवाद, सही समाधान – Arun

+0

@ अरुण आपका स्वागत है। –

+0

@Nayan जो मैंने केवल उन स्तंभों को देखा जिन्हें आपने मूल क्वेरी से मैपिंग रिटर्न में निर्दिष्ट किया है, आपका उदाहरण कैसे काम करता है? –

1

मुझे लगता है कि आप कैसे कॉलम संस्थाओं के गुणों को मैप निर्दिष्ट करने के लिए SqlResultSetMapping उपयोग करना चाहिए।

आप Eclipselink परियोजना (जेपीए संदर्भ कार्यान्वयन) उपयोगी के इस विकि पृष्ठ खोज सकते हैं: http://en.wikibooks.org/wiki/Java_Persistence/Querying#Result_Set_Mapping

+0

(बहुत सामान्य) बहुत विशिष्ट प्रश्न के लिए डॉक्स के लिए लिंक उपयोगी imho नहीं हैं। कम से कम प्रासंगिक अनुभागों को उद्धृत करें ताकि हम जान सकें कि दस्तावेज़ों का कौन सा हिस्सा हमें देखना चाहिए। –

0

मैं जेपीए का उपयोग नहीं है, इसलिए निशान बंद करता है, तो उपेक्षा, लेकिन अगर संस्थाओं मैप नहीं कर रहे हैं, तो क्यों कर सकते हैं आप अपनी क्वेरी में प्रभावित फ़ील्ड को उपनाम नहीं करते हैं और तदनुसार परिणाम सेट तक पहुंचते हैं? इकाई बीन में

select b.descricao AS d1, prd.descricao as d2, ca.descricao as d3... 
-1
@Transactional(readOnly = true) 
@SuppressWarnings("unchecked") 
@Column(name = "status") 

public List<Student> findStudentByStatus(String status) { 
    System.out 
      .println("call findStudentMethd******************with this pattern" 
        + status 
        + "*********************************************"); 

    return em.createQuery(
      "select attendence from Attendence attendence where attendence.status like '" 
        + p 
        + A 
        + L 
        + "'") 

    .getResultList(); 

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