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

NamedQuery

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

パラメータを設定する

Hibernate

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 が String (文字型) であると仮定

EDIT2 著者は質問を何度も編集したため、彼をフォローアップすることはできません:) IN式の配列を渡すことに関する実際の質問については、StackOverflowに関する同様の質問のリンクを次に示します: JPQL IN句 - 配列

于 2010-12-20T12:49:59.177 に答える