2017-12-15 3 views
0

Ich schreibe eine Named Query, um Daten basierend auf jährlichen Basen abzurufen.So senden Sie Spaltenname als Parameter in Named Query

Abfrage

SELECT * FROM table1 
    WHERE ((year1 > 0) OR (year2> 0 OR (beyondYear2> 0))); 

Die Abfrage funktioniert gut. Von JSP werde ich das Jahr auswählen, also sollte das Album für dieses spezielle Jahr geladen werden. Die obige Abfrage lädt Daten für den gesamten Jahrbereich. Gibt es eine Möglichkeit, dass ich Column Name als Parameter übergeben kann, um zu vermeiden, die Abfrage für jedes Jahr zu schreiben?

SELECT * FROM table1 
WHERE (:yearRange > 0); 

: yearRange: als Parameter.

Antwort

1

Sie können den Parameter als Schalter verwenden:

SELECT * FROM table1 
    WHERE ((year1 > 0 AND :yearRange='year1') OR (year2> 0 AND :yearRange='year2' OR (beyondYear2> 0 AND :yearRange='beyondYear2'))); 
+0

Wie kann ich von Java, dass geschickt? Soll ich setString() oder setParameter() verwenden? und ich habe diesen Teil nicht verstanden ': yearRange = 'year1'' – Sam

+0

setParameter, es ist ein normaler Abfrageparameter – Turo

+0

Nein. Es funktioniert nicht. Ich bekomme einen Fehler mit den Worten: 'SEVERE: Ungültige Spalte Name org.hibernate.exception.GenericJDBCException: konnte query nicht ausführen ' – Sam

Verwandte Themen