Pregunta

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

Esto me da un error que no puede reconocer el método isTest (). En lugar de este método si pongo una sentencia if como lik si (1 == 1) o algo por el estilo, que dice "atributo debe ser Constans" en IntelliJ IDEA. ¿Cómo resolver?

¿Fue útil?

Solución

Los parámetros de anotaciones Java sólo puede ser constantes en tiempo de compilación. Esto no puede funcionar.

Referencia: anotaciones

Cita:

Una vez que se define un tipo de anotación, se puede utilizar con las declaraciones Anotar. Una anotación es un tipo especial de modificador, y se puede utilizar en cualquier lugar que otros modificadores (como pública, estática o final) pueden ser utilizados. Por convención, las anotaciones preceden a otros modificadores. Anotaciones consisten en un AT-signo (@) seguido de un tipo de anotación y una lista entre paréntesis de pares de elementos de valor. Los valores deben ser constantes de tiempo de compilación.

Otros consejos

No creo que usted puede hacer esto de un NamedQuery.

O crear varias consultas con nombre, o utilizar una consulta dinámica en su lugar:

 Query query = em.createQuery(...); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top