Java 我可以使用SQL';namedQuery的(…)语句中是否有?
如何在我的namedQuery中使用INJava 我可以使用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
@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);