如何在我的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时设置它。
答案 0 :(得分:26)
@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);
答案 1 :(得分: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)
(如果有数字)?
答案 2 :(得分:0)
JPQL中的表达式“IN”等于写入多个“OR”语句,在您的情况下,“IN”的示例将是:
... p.available IN ('US', 'GB') ...
我认为这等于:
... p.available = 'US' OR p.available = 'GB' ...
这是一个很好地解释它的链接:OpenJPA: IN Expression
修改强> 附:假设p.available是String(字符类型)
<强> EDIT2 强> 作者已多次编辑问题,我无法跟进他:)至于关于为IN-expression传递数组的实际问题,这里是StackOverflow上类似问题的链接:JPQL IN clause - Arrays