0

次のテーブルがあるとしましょう:

Table A: id b-id
Table B: id property

テーブルAの要素をJPQL言語で次のようにフィルタリングできますか?

SELECT a FROM A a JOIN ab-id targetId WHERE targetId.property = : someValue

参照された B 要素がプロパティ = someValue を持つテーブル A の要素を取得したい

3つ目のテーブルを紹介すると

Table A: id b-id
Table B: id c-id
Table C: id property

c.property=someValue の A の要素を取得するにはどうすればよいですか?

ORM の力を感じ始めていますが、いくつかの概念はまだ漠然としています。ご回答ありがとうございます

4

1 に答える 1

1

JPQL クエリは、データベース テーブルではなく、エンティティに対して動作します。エンティティと永続属性の名前は、問題のテーブルとデータベース列の名前と一致すると思います。

問題のすべてのリレーションは単一値、1 対 1 または多対 1 (それぞれAが 1 つにのみ接続されているB(またはいずれにも接続されていない)、それぞれBが 1 つに接続されているC) ため、クエリで結合を指定する必要はありません。全て。

SELECT a FROM A a WHERE abcproperty = someValue

JPA 2.0 仕様で述べられているように、パスの null 値について心配する必要はありません。

Path expression navigability is composed using “inner join” semantics. 
That is, if the value of a non-terminal field in the path expression is null, 
the path is considered to have no value, and does not participate in the 
determination of the result.

コレクション値の属性 (1 対多、多対多) では、同じ方法は機能しません。これは、パス式を介してそれらの属性に移動することができないためです。

于 2013-02-19T19:25:53.053 に答える