2010-11-23 9 views
7

Ich habe mehrere NamedQuery definiert, und ich würde gerne in der Lage sein, auf einem Feld für eine Entität dynamisch zu sortieren, ohne zu erstellen NamedQuery für jedes Feld, das ich sortieren möchte. Zum Beispiel:Dynamische Sortierung einer NamedQuery? Naht/Hibernate/JPA

Ich habe eine Entität namens MyObject, mit Feldern 'a', 'b' und 'c'. Meine Basisabfrage ist "SELECT DISTINCT o FROM MyObject o", aber ich möchte in der Lage sein, eine ORDER BY-Klausel zu meiner Abfrage hinzuzufügen. Im Idealfall würde ich in der Lage sein, so etwas wie benannte Parameter zu tun, wo meine Abfrage aussehen würde:

SELECT DISTINCT o FROM MyObject o ORDER BY :order 

ich das Feld angeben würde dann (a, b, c), die ich auf sortieren möge. Gibt es eine Möglichkeit, dies mit Seam/Hibernate/JPA zu erreichen? Gibt es eine bessere Strategie, um dies anzugehen?

+1

Diese Frage bezieht sich auf [Hibernate Namensabfrage nach Parameter] (http://stackoverflow.com/questions/4120388/hibernate-named-query-order-by-partameter). Vielleicht hilft dir die entsprechende Antwort. – kraftan

Antwort

5

Benannte Abfragen können zur Laufzeit nicht geändert werden.

// ----- Edited-Teil

public void getOrders(String orderByElement){ 

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

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

Seine spezifische JPA.

+0

Genau das habe ich gesucht. Aber würde die von Ihnen angegebene Abfrage funktionieren, wenn ich sie als JPA @namedQuery angegeben hätte? Oder würde es nur funktionieren, wenn es mit entityManager.createQuery erstellt wird? Ich kann mir keinen Grund vorstellen, warum es nicht so wäre, aber ich will nur sichergehen. – Shadowman

+0

Ich glaube nicht, dass diese Lösung funktioniert. Laut [JPQL Language reference] (http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_input_params) sind Eingabeparameter nur in 'WHERE' und' HAVING' erlaubt Klauseln. Hast du diese Abfrage ausprobiert? – kraftan

+0

Bearbeitete meine Antwort entsprechend. –

Verwandte Themen