@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中说“属性必须是常量”。怎么解决?
答案 0 :(得分:4)
Java注释的参数只能是编译时常量。这不起作用。
参考页: Annotations
<强>引用:强>
定义注释类型后,您可以使用它来注释声明。注释是一种特殊的修饰符,可以在任何可以使用其他修饰符(例如public,static或final)的地方使用。按照惯例,注释在其他修饰符之前。注释由符号(@)后跟注释类型和带括号的元素 - 值对列表组成。 值必须是编译时常量。
答案 1 :(得分:3)
我不相信你可以从NamedQuery中做到这一点。
创建多个命名查询,或者改为使用动态查询:
Query query = em.createQuery(...);