使用其他语句以命名查询吗?
-
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)或类似的内容,而不是此方法,则在Intellij Idea中说“属性必须为constans”。怎么解决?
解决方案
Java注释的参数只能是编译时常数。这是行不通的。
参考页: 注释
引用:
定义注释类型后,您可以使用它来注释声明。注释是一种特殊的修饰符,可以在任何其他修饰符(例如公共,静态或最终)的任何地方使用。按照惯例,注释在其他修饰符之前。注释由一个符号(@)组成,然后是注释类型和元素值对的括号列表。 值必须是编译时常数。
其他提示
我不相信您可以从命名的Querquery做到这一点。
创建多个命名查询,或者使用动态查询:
Query query = em.createQuery(...);
不隶属于 StackOverflow