11

如何在我的 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),并且我想在 IN 语句中定义变量。但是参数的数量不是恒定的。我想定义一个数组或类似的东西:array[],我想在调用namedQuery时设置它。

4

3 回答 3

27

命名查询

@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);

JPA

query.setParameter('availableCollection', yourCollection);
于 2010-12-20T12:59:09.210 回答
0

你有没有尝试过类似的东西

SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
('foo', 'bar') OR p.available = :available)

(如果“可用”是一个字符串)

或者

SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
(1, 2, 3) OR p.available = :available)

(如果有的话是一个数字)?

于 2010-12-20T12:49:36.180 回答
0

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

... p.available IN ('US', 'GB') ...

我认为这等于:

... p.available = 'US' OR p.available = 'GB' ...

这是一个很好地解释它的链接:OpenJPA:IN Expression

编辑 PS 假设 p.available 是字符串(字符类型)

EDIT2 作者已经多次编辑问题,我无法跟进他:) 至于关于为 IN 表达式传递数组的实际问题,这里是 StackOverflow 上类似问题的链接:JPQL IN 子句 - 数组

于 2010-12-20T12:49:59.177 回答