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

4

2 回答 2

4

Java 注解的参数只能是编译时常量。这是行不通的。

参考页面: 注解

引用:

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

于 2010-12-20T10:43:57.557 回答
3

我不相信你可以通过 NamedQuery 做到这一点。

要么创建多个命名查询,要么使用动态查询:

 Query query = em.createQuery(...); 
于 2010-12-20T10:41:54.620 回答