Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否对命名查询使用if-else语句?_Java_Jpa_Annotations_Entity_Named Query - Fatal编程技术网

Java 是否对命名查询使用if-else语句?

Java 是否对命名查询使用if-else语句?,java,jpa,annotations,entity,named-query,Java,Jpa,Annotations,Entity,Named Query,这给了我一个错误,它无法识别isTest()方法。如果我将if语句设置为lik-if(1==1)或类似的形式,则在Intellij IDEA中,它会说“属性必须是常量”,而不是使用这种方法。如何解决?我不相信你能从一个命名查询中解决这个问题 创建多个命名查询,或改用动态查询: @NamedQueries( { @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELE

这给了我一个错误,它无法识别isTest()方法。如果我将if语句设置为lik-if(1==1)或类似的形式,则在Intellij IDEA中,它会说“属性必须是常量”,而不是使用这种方法。如何解决?

我不相信你能从一个命名查询中解决这个问题

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

@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)")),  
 }

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

参考页:

引用:

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


有什么棘手的办法吗。例如,定义两个名称相同的NamedQuery“GetAvailableProducts”,并将它们放入一个抽象类中。并在我的名为查询的类中实现它。但是,namedQuery将激活我想要的查询。所以我会选择一个namedQuery,我不会再改变我的namedQuery了。但是我想有一次这样做..我可以在()语句中使用SQL来进行namedQuery吗?在
NamedNaviQuery
中可以使用SQL,在
namedQuery
中可以使用JPQL。In()应该在这两种语言中都可用
 Query query = em.createQuery(...);