Использование оператора, если ELSE для названного запроса?
-
11-10-2019 - |
Вопрос
@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) или что -то в этом роде, он говорит «атрибут должен быть Констанс» в идее. Как решить?
Решение
Параметры аннотаций Java могут быть только константами времени компиляции. Это не может работать.
Справочная страница: Аннотации
Цитировать:
После определения типа аннотации вы можете использовать его для аннотирования объявлений. Аннотация - это особый вид модификатора, и может использоваться везде, где могут использоваться другие модификаторы (такие как публичные, статические или окончательные). По соглашению аннотации предшествуют другим модификаторам. Аннотации состоят из AT-SIGN (@), за которым следует тип аннотации и в скобках списка пар элемента. Значения должны быть постоянными временем компиляции.
Другие советы
Я не верю, что вы можете сделать это из названногоквери.
Либо создайте несколько именованных запросов, либо вместо этого используйте динамический запрос:
Query query = em.createQuery(...);