Question

@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)")),  
 }

Cela me donne une erreur, il ne peut pas reconnaître la méthode isTest (). Au lieu de cette méthode si je mets une instruction if comme si lik (1 == 1) ou quelque chose comme ça, il dit: « L'attribut doit être Constans » dans IntelliJ IDEA. Comment résoudre?

Était-ce utile?

La solution

Les paramètres des annotations Java ne peuvent être des constantes de compilation. Cela ne peut pas fonctionner.

Référence: annotations

Citation:

  

Une fois qu'un type d'annotation est définie, vous pouvez l'utiliser pour les déclarations annoter. Une annotation est un type spécial de modificateur, et peut être utilisé partout où d'autres modificateurs (tels que du public, statique ou finale) peuvent être utilisés. Par convention, les annotations précèdent d'autres modificateurs. Les annotations sont constitués d'un à-signe (@) suivi d'un type d'annotation et une liste entre parenthèses de paires de valeurs de l'élément. Les valeurs doivent être des constantes de compilation.

Autres conseils

Je ne crois pas que vous pouvez le faire à partir d'un NamedQuery.

Soit créer plusieurs requêtes nommées, ou utiliser à la place une requête dynamique:

 Query query = em.createQuery(...); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top