Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 我可以使用SQL';namedQuery的(…)语句中是否有?_Java_Sql_Named Query - Fatal编程技术网

Java 我可以使用SQL';namedQuery的(…)语句中是否有?

Java 我可以使用SQL';namedQuery的(…)语句中是否有?,java,sql,named-query,Java,Sql,Named Query,如何在我的namedQuery中使用IN @NamedQueries( { @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT p FROM Product p WHERE p.type= :type AND (p.available IN ('I want to define changeable size of an array or someti

如何在我的namedQuery中使用IN

@NamedQueries(  
 {   
 @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN ('I want to define changeable size of an array or sometinhg like that') OR p.available = :available)")),  
 }

我的意思是我可以设置'type'参数(我将其定义为变量-->:type),并且我希望在IN语句中定义变量。然而,参数的数量不是恒定的。我想定义一个数组或类似的东西:array[],我想在调用namedQuery时设置它。

您尝试过类似的方法吗

SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
('foo', 'bar') OR p.available = :available)
(如果“可用”是字符串)


(如果可用的是一个数字)

JPQL中的表达式“IN”等于编写多个“OR”语句,在您的情况下,“IN”的示例是:

... p.available IN ('US', 'GB') ...
我认为这等于:

... p.available = 'US' OR p.available = 'GB' ...
这里有一个链接可以很好地解释这一点:

编辑 假设P.available为字符串(字符类型)

EDIT2 作者多次编辑了这个问题,我无法跟进:)至于关于在表达式中传递数组的实际问题,这里有一个关于StackOverflow的类似问题链接:

NamedQuery 设置参数 休眠:

JPA:


在我的程序中,变量的数量是可变的,这可能取决于(1,2)或(1,2,3)。所以我应该为它定义类似数组的变量。很抱歉:)但我想根据评论让大家更清楚,所以我编辑了它,让我的问题更清楚:)我的查询变量是“查询”类型的变量。它有setParameter()方法,但我看不到setParameterList()方法?链接:import javax.persistence.Query//我将此导入用于我的查询变量。我使用了HibernateAPI。JPA查询确实没有
setParameterList
方法。据我所知,您只需使用
setParameter
并传递一个集合。我可以确认使用JPA,query.setParameter对列表有效。
... p.available = 'US' OR p.available = 'GB' ...
@NamedQueries(  
{   
 @NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",  
}
query.setParameterList('availableCollection', yourCollection);
query.setParameter('availableCollection', yourCollection);