Использование оператора if else для именованного запроса? - PullRequest
2 голосов
/ 20 декабря 2010
@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)")),  
 }

Это дает мне ошибку, поскольку не может распознать метод isTest ().Вместо этого метода, если я помещаю оператор if как lik if (1 == 1) или что-то в этом роде, он говорит: «Атрибут должен быть постоянным» в Intellij IDEA.Как решить?

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Параметры аннотаций Java могут быть только константами времени компиляции.Это не может работать.

Справочная страница: Аннотации

Цитата:

Как только тип аннотации определен, вы можете использовать его для аннотирования объявлений.Аннотация - это особый вид модификатора, который можно использовать везде, где могут использоваться другие модификаторы (например, public, static или final).По соглашению аннотации предшествуют другим модификаторам.Аннотации состоят из символа (@), за которым следует тип аннотации и заключенный в скобки список пар элемент-значение. Значения должны быть константами времени компиляции.

3 голосов
/ 20 декабря 2010

Я не верю, что вы можете сделать это с помощью NamedQuery.

Либо создайте несколько именованных запросов, либо используйте вместо них динамический запрос:

 Query query = em.createQuery(...); 
...