Frage

@NamedQueries(  
   {   
 @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT p   FROM Product p WHERE p.type= :type AND (p.available = 'ALL' OR").append(isTest() ? "(p.available = 'TEST' OR)"  : " ").append("p.available = :available)")),  
 }

Das gibt mir einen Fehler, der es nicht die isTest () Methode erkennen kann. Anstelle dieser Methode, wenn ich lege eine if-Anweisung als lik, wenn (1 == 1) oder so ähnlich, heißt es in IntelliJ IDEA „Attribut constans sein muss“. Wie zu lösen?

War es hilfreich?

Lösung

Die Parameter von Java-Annotationen können nur Kompilierung-Konstanten sein. Dies kann nicht funktionieren.

Referenzseite: Anmerkungen

Zitat:

Sobald eine Anmerkung Typ definiert ist, können Sie es zu annotate Deklarationen verwenden. Eine Anmerkung ist eine besondere Art von Modifikator und kann überall dort eingesetzt werden, dass andere Modifikatoren (wie öffentliche, statische oder endgültig) verwendet werden kann. Per Konvention voraus Anmerkungen andere Modifikatoren. Anmerkungen bestehen aus einer at-Zeichen (@), gefolgt von einem Annotationstyp und eine eingeklammerten Liste von Element-Wert-Paaren. Die Werte müssen Kompilierung-Konstanten sein.

Andere Tipps

I don't believe you can do this from a NamedQuery.

Either create multiple named queries, or use a dynamic query instead:

 Query query = em.createQuery(...); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top