简体   繁体   English

我可以将SQL的IN(...)语句用于namedQuery吗?

[英]Can I use SQL's IN(…) statement for a namedQuery?

How can I use IN at my namedQuery? 如何在我的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)")),  
 }

I mean that I can set 'type' parameter (I defined it as a variable----> :type) and I want to define variables inside of IN statement to. 我的意思是我可以设置'type'参数(我把它定义为变量---->:type),我想在IN语句中定义变量。 However the number of parameters are not constant. 但是参数的数量不是恒定的。 I want to define an array or something like that :array[] and I want to set it when I call that namedQuery. 我想定义一个数组或类似的东西:array []我想在调用namedQuery时设置它。

NamedQuery NamedQuery

@NamedQueries(  
{   
 @NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",  
}

Set parameters 设置参数

Hibernate : 休眠

query.setParameterList('availableCollection', yourCollection);

JPA : JPA

query.setParameter('availableCollection', yourCollection);

Did you try something like 你尝试过类似的东西吗?

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

(if "available" is a string) (如果“可用”是一个字符串)

or 要么

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

(if available is a number)? (如果有数字)?

Expression 'IN' in JPQL is equal to writing multiple 'OR' statements, in your case an example of 'IN' would be: JPQL中的表达式“IN”等于写入多个“OR”语句,在您的情况下,“IN”的示例将是:

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

Which I believe is equal to: 我认为这相当于:

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

Here's a link that explains it well: OpenJPA: IN Expression 这是一个很好地解释它的链接: OpenJPA:IN Expression

EDIT PS Assuming p.available is String (character type) EDIT PS假设p.available是String(字符类型)

EDIT2 The author has edited question so many times that I can't follow up him :) As for the actual question about passing array for IN-expression, here's a link of similar question on StackOverflow: JPQL IN clause - Arrays EDIT2作者已编辑了很多次问题我无法跟进他:)至于为IN-expression传递数组的实际问题,这里是StackOverflow上类似问题的链接: JPQL IN子句 - 数组

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM