名前の付いた(…)ステートメントを使用することはできますか?
-
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
所属していません StackOverflow