2013-04-30 21 views
9

GÜNCELLENDİ - commentJPQL hazırda Boşlara SON göz ardı ediliyor

Ben CriteriaQuery.orderBy boş değerlere SON desteklemediği farkındayım cevabı bakın.

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC NULLS LAST, c.lastName ASC"; 

    TypedQuery<Contact> query = em.createQuery(sql, Contact.class); 
    query.setParameter("pCode", partnerCode);  

    return query.getResultList(); 

Bu birincil bayrak descendings tarafından sipariş benim sonuç döndürür: sadece onu yok sayar, hataları atmak değil - Ben TypedQuery kullanmaya çalışıyor ve onu "Boşlara SON" sonra sadece her şeyi görmezden görünüyor fark edildi nulls, soyadındaki sıralama yok sayılır.

ben yaparsanız bu:

 String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC, c.lastName ASC"; 

Ben hem birincil hem de soyadı tür almak, ancak Oracle DB çünkü hala ilk nulls ile bitirmek.

NULLS LAST eklediğimde hiçbir hata iletisinin atılmamasına şaşırdım ve bazı sözdizimi tweaks ile NULLS LAST isteğini kabul etmeyi umuyordum.

+0

Bir iş arkadaşım benim için bir çözüm sağladı. Hala neden sorgunun NULLS LAST'I neden görmezden geldiğini bilmiyorum ama bu geçici çözümüm olarak kullanmayı bıraktım: Dize sql = "SELECT c FROM İletişim c WHERE c.partnerCode =: pCode ve c.activeFlag = 'Y'" \t \t + "ORDER BY nvl (c.primaryFlag, 'N') DESC, c.lastName ASC"; Not: sütunun değerleri 'Y', 'N' veya null. Nvl kullanarak null yerine 'N' kullanıyorum. – headlikearock

+0

Kendi sorunuza cevap vermeli ve cevabı kabul etmelisiniz. – sharakan

+0

Teşekkürler - Bu benim ilk gönderme oldu ve o zaman kendi sorumu cevaplamak için izin verilmiyordu, bu yüzden bir yorum olarak ekledim! – headlikearock

cevap

2

Bir çalışan, benim için bir çözüm sağladı. Yine sorgu SON NULLS görmezden neden bilmek ama benim geçici çözüm olarak bu kullanarak sona erdi yoktur:

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'"    
+" ORDER BY nvl(c.primaryFlag, 'N') DESC, c.lastName ASC"; 

Not: sütun için değerler 'Y' idi, 'N' veya boş. Nvl kullanarak null yerine 'N' kullanıyorum.

İlgili konular