使用if else语句进行命名查询?

时间:2010-12-20 10:22:31

标签: java jpa annotations entity named-query

@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语句设置为if(1 == 1)或类似的东西,而不是这种方法,它在Intellij IDEA中说“属性必须是常量”。怎么解决?

2 个答案:

答案 0 :(得分:4)

Java注释的参数只能是编译时常量。这不起作用。

参考页: Annotations

<强>引用:

  

定义注释类型后,您可以使用它来注释声明。注释是一种特殊的修饰符,可以在任何可以使用其他修饰符(例如public,static或final)的地方使用。按照惯例,注释在其他修饰符之前。注释由符号(@)后跟注释类型和带括号的元素 - 值对列表组成。 值必须是编译时常量。

答案 1 :(得分:3)

我不相信你可以从NamedQuery中做到这一点。

创建多个命名查询,或者改为使用动态查询:

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