2010-11-23 28 views
7

Birden çok NamedQuery tanımladım ve sıralamak istediğim her alan için benzersiz NamedQuery oluşturmak zorunda kalmadan dinamik olarak bir varlık için bir alanı sıralayabilmek istiyorum. Örneğin,Bir NamedQuery'yi dinamik olarak sıralama? Dikiş/Hazırda Bekleme/JPA

"a", "b" ve "c" alanlarıyla MyObject adında bir varlık var. Temel sorgum "SELECT DISTINCT o FROM MyObject o", ancak sorguma ORDER BY yan tümcesi ekleyebilmek istiyorum. İdeal olarak, benim sorgu gibi görünecektir adlandırılmış parametreleri, böyle bir şey yapmak mümkün olurdu:

SELECT DISTINCT o FROM MyObject o ORDER BY :order 

Sonra alanını belirtmek istiyorum (a, b, c) Üzerinde sıralamak istiyorum. Bunu Seam/Hibernate/JPA kullanarak gerçekleştirmenin herhangi bir yolu var mı? Bunu çözmek için daha iyi bir strateji var mı?

+1

Bu soru, [Parametreye göre Hazırda Bekleme sorgu sırası] (http://stackoverflow.com/questions/4120388/hibernate-named-query-order-by-partameter) ile ilgilidir. Belki de karşılık gelen cevap size yardımcı olur. – kraftan

cevap

5

Adlandırılmış sorgular çalışma zamanında değiştirilemez.

// ----- Düzenlendi parçalı

public void getOrders(String orderByElement){ 

    String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement; 

    entityManager.createQuery(query).getResultList(); 
} 

Onun JPA özgü.

+0

Tam olarak aradığım şey buydu. Ancak, JPA @NamedQuery olarak belirttiğim halde, sağladığınız sorgu işe yarar mı? Veya sadece entityManager.createQuery ile oluşturulduğunda çalışır mı? Bunun neden olmayacağını düşünemiyorum ama emin olmak istiyorum. – Shadowman

+0

Bu çözümün işe yaramadığını düşünüyorum. [JPQL Dil referans] göre (http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_input_params) giriş parametreleri, sadece 'WHERE' ve' HAVING' izin verilir maddeleri. Bu sorguyu denediniz mi? – kraftan

+0

Cevabımı buna göre düzenledim. –