JPA NamedQuery mit Enum-Wert

Hallo Java-Forum,

Ich arbeite derzeit mit JSF und JPA an einer Lösung und bin nun darauf gekommen, verschiedene Typen als enums anstatt mit einfachen Konstanten zu pflegen, was diverse Vorteile bringt.

Da ich NamedQueries einsetzte, habe ich auch dort gebrauch davon gemacht. Allerdings wirft mir der Java-Compiler bei folgendem Versuch eine Fehlermeldung an den Kopf.

The value for annotation attribute NamedQuery.query must be a constant expression

Java:
@NamedQuery(name = ProjectCardParameter.QUERY_BY_PROJECT_TYPE, query = "SELECT pcp FROM ProjectCardParameter pcp WHERE (pcp.projectType = :projectType1 OR pcp.projectType = " + Constants.ProjectType.ANY + ") ORDER BY pcp.defaultVisibility ASC, pcp.name ASC"),

Wenn ich den Teil
Java:
OR pcp.projectType = " + Constants.ProjectType.ANY
wegnehme, passt es, aber ich brauche diesen Teil. Mir fallen zwar einige Wege ein dies zu umschiffen, aber eigentlich würde ich gerne verstehen warum das so ist bzw. wie ich dies richtig machen kann?

Gruß

Sebastian
 
Der Compiler muss bei Annotation zur compilezeit den endgültigen Wert bestimmen können. Da es möglich ist die toString Methode von Constants.ProjectType.ANY zu überschreiben, kann der endgültige Wert nicht bestimmt werden.
 
Ok,

erstmal danke für die Antwort. Verstehen tue ich es trotzdem nicht. Zur Compile-Zeit steht doch fest, wie die toString()-Methode aussieht.???:L

Wenn ich das richtig im Kopf habe. macht der Compiler aus den enum-Deklarationen doch jeweils eine Klasse mit entsprechenden Wert-Konstanten für die einzelnen enum-Werte.
Java programming language enum types are much more powerful than their counterparts in other languages. The enum declaration defines a class (called an enum type). The enum class body can include methods and other fields. The compiler automatically adds some special methods when it creates an enum. For example, they have a static values method that returns an array containing all of the values of the enum in the order they are declared.
 

Zurück
Oben