2011-05-30 18 views
7

JPA aracılığıyla sql yerel sorguyu kullanarak bazı verileri seçerken bazı sorunlar yaşıyorum. Çünkü aynı ada sahip 3 sütunum var, "descricao". I EntityManager arayüzünün createNativeQuery yöntemi ile seçme işlemi gerçekleştirmek zaman JPA yerel sorguyu kullanarak aynı ada sahip birden çok sütun nasıl seçilir?

İlk sütun değeri geçersiz kılar diğerleri bulundu.

(örn. I (nesnelerinin bir dizisi bu sonucu elde zaman belirli bir kaydın ilk sütun Descrição değeri "fan" ikinci "çubuğu" ve üçüncü "filanca", I sığınak için' t ORM objektifleri), her ne zaman sütun ile belirtilen alt ve ikinci değerler ile doldurulmalıdır, sütunlar ilkinin değeri ile doldurulurlar)

Bunun tam olarak eminim çünkü JPA'yı seçtikten sonra doğrudan veritabanı üzerinde her şeyi düzgün bir şekilde döndürür.

Çevre:

MySQL5; EJB 3.0; JPA 1.0; JBoss 5.0.0GA; JDK 1.6;

SQL sorgusu:

"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 
      ..." 

cevap

5

Skaler sütun eşlemeler: Sütun eşleştirmeleri belirtilen Şimdi yerli sorguda sütunlar için takma adını kullanarak

@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 i olarak ca.descricao olarak prd.descricao olarak p.id, p.datapedido, b.descricao seçin. produto_id, i.valoritem, hc.valor_utilizado, tp.datapagamento ... "

resultSetMapping & sorgusu belirterek yerel sorgu oluşturma. çok spesifik sorular için (çok genel) dokümanlara

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

teşekkürler, mükemmel çözüm – Arun

+0

@Arun Rica ederim. –

+0

@Nayan, yalnızca yerel sorgudan eşleme dönüşünde belirttiğiniz sütunları gördüğümden, örneğiniz nasıl çalışıyor? –

1

Sana sütunları varlıkların özelliklerine nasıl eşleştiği belirtmek için SqlResultSetMapping kullanmak gerektiğini düşünüyorum.

Sen EclipseLink projesi kullanışlı (JPA referans uygulama) bu wiki sayfasını bulabilirsiniz: http://en.wikibooks.org/wiki/Java_Persistence/Querying#Result_Set_Mapping

+0

Linkler kullanışlı imho değildir. En azından ilgili bölüm/bölümleri alıntılayın, böylece dokümanlar için hangi bölümün aradığımızı bilelim. –

0

Ben JPA kullandığından, işareti kapalı ise görmezden Ancak, şirketler eşlenen değilse, o zaman neden can yok Sorgunuzdaki etkilenen alanları takma ve sonuç kümesine uygun şekilde erişme Varlık Bean içinde

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(); 

} 
İlgili konular