Domanda

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

Questo mi dà un errore che non può riconoscere il metodo isTest (). Invece di questo metodo se metto un'istruzione if come lik se (1 == 1) o qualcosa del genere, si dice "attributo deve essere constans" in IntelliJ IDEA. Come risolvere?

È stato utile?

Soluzione

I parametri di annotazioni Java non può che essere costanti in fase di compilazione. Questo non può lavoro.

Pagina di riferimento: annotazioni

Quote:

Una volta che un tipo di annotazione è definito, si può utilizzare per le dichiarazioni Annotazione. Un'annotazione è un tipo speciale di modificatore, e può essere utilizzato ovunque che altri modificatori (come pubblico, statica o finale) possono essere utilizzati. Per convenzione, annotazioni precedono altri modificatori. Annotazioni costituite da un simbolo at (@) seguito da un tipo di annotazione e una lista tra parentesi di coppie elemento-valore. I valori devono essere costanti in fase di compilazione.

Altri suggerimenti

Non credo che si può fare questo da un NamedQuery.

In entrambi creare più di nome query, o utilizzare una query dinamica, invece:

 Query query = em.createQuery(...); 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top