名前の付いた(…)ステートメントを使用することはできますか?

StackOverflow https://stackoverflow.com/questions/4489687

  •  11-10-2019
  •  | 
  •  

質問

名前を挙げて使用するにはどうすればよいですか?

@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)")),  
 }

つまり、「タイプ」パラメーターを設定できます(変数---->:タイプとして定義しました)。ただし、パラメーターの数は一定ではありません。配列かそのようなものを定義したい:配列[]そして、私はそれを名前を付けたときに設定したい。

役に立ちましたか?

解決

名前付き

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

他のヒント

あなたはようなことを試しましたか

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)

(利用可能な場合は番号があります)?

jpqlの式「in」は、複数の声明または「ステートメントを書くことに等しくなります。あなたの場合、「in」の例は次のとおりです。

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

私が等しいと思います:

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

これがそれをよく説明するリンクです: OpenJPA:表現

編集p.availableが文字列(文字タイプ)であると仮定するps

編集2著者は質問を何度も編集しているので、私は彼をフォローアップできません:)発現のために配列を渡すことに関する実際の質問については、Stackoverflowに関する同様の質問のリンクを示します。 句のjpql -arrays

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top