2

EJB-QL には、いくつかの EJB 2.1 finder メソッドで次の構造があります。

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID is not null 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted is null and dr.deleted is null

IDEA の EJB-QL インスペクションは、次のようFROM RequestDetail rd, DetailResponse drなインスペクションで2 つのオブジェクトの使用にフラグを立てます。Several ranged variable declarations are not supported, use collection member declarations instead (e.g. IN(o.lineItems))

JBoss 4.2 では、クエリ自体は正常に機能します (期待される結果が返されます)。ここで IDEA は完全に濡れていますか、それともクエリに有効な問題がありますか? そして、そのようなクエリの実際に推奨される代替構文は何ですか?

編集:答えてくれたすべての人、特にロマンの助けに感謝します。これを問題として JetBrainsに報告しました。

4

3 に答える 3

2

クエリは問題ありません - IDEA Code Inspector の問題のようです。
それ自体に対してログに記録されたバグは見つかりません。

有料版をお持ちの場合は、サポートに問い合わせてください。

EJB 2.1の仕様(およびその他すべて)で、NULLに大文字を使用するように記載されている小さな問題を見つけました。

11.2.6.10 Null 比較式
条件式で比較演算子 IS NULL を使用する構文は次のとおりです。input_parameter }IS [NOT ] NULL null 比較式は、単一値パス式または入力パラメーターが NULL 値であるかどうかをテストします。

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID IS NOT NULL 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted IS NULL and dr.deleted IS NULL

これは、クエリに一致する EJB 2.1 仕様のセクションです...

11.2.5.3 範囲変数の宣言 識別変数を範囲変数として宣言するEJB QL構文は、SQLの構文と似ています。オプションで、AS キーワードを使用します。

range_variable_declaration ::= abstract_schema_name [AS ] identifier エンティティ Bean に関連するオブジェクトまたは値は、通常、パス式を使用したナビゲーションによって取得されます。ただし、ナビゲーションはすべてのオブジェクトに到達するわけではありません。範囲変数の宣言により、Bean プロバイダーは、ナビゲーションによって到達できない可能性があるオブジェクトの「ルート」を指定できます。Bean プロバイダが、エンティティ Bean の抽象スキーマ タイプの複数のインスタンスを比較して値を選択する場合、FROM 句には、抽象スキーマ タイプにまたがる複数の識別変数が必要です。

次のファインダ メソッド クエリは、数量が John Smith の注文数量より大きい注文を返します。この例は、FROM 句での 2 つの異なる識別変数の使用を示しています。どちらも抽象スキーマ タイプ Order です。このクエリの SELECT 句は、返されるのは John Smith よりも多い数量の注文であると判断します。

SELECT DISTINCT OBJECT(o1)
FROM Order o1, Order o2
WHERE o1.quantity > o2.quantity AND
o2.customer.lastname = ‘Smith’ AND
o2.customer.firstname= ‘John’
于 2010-05-02T03:30:13.097 に答える
1

detailResponse が、値が DetailResponse のインスタンスのコレクションである関連付けフィールドの名前であると仮定すると、関連付けフィールドを介したナビゲーションのためにこれを実行できます。

  SELECT distinct OBJECT(rd) FROM RequestDetail rd IN (rd.detailResponse) dr WHERE
  dr.updateReqResponseParentID is not null and dr.updateReqResponseParentID = ?1 
  and rd.deleted id null and dr.deleted is null
于 2010-05-01T16:59:04.997 に答える
0

クエリを J2EE 1.3の EJB QL の BNF 文法のような公式リソースと比較します (EJB2.1 について言及したため)

JEE5 Full Query Language Syntaxの最新の仕様については、

于 2010-05-01T10:59:32.587 に答える