27

2 つのデータベース テーブルに外部キー関係があります。

それらは JPA によって 2 つのエンティティABにマップされますが、結合列はエンティティから手動で削除されるため、JPA ワールド クラスABは関連付けられておらず、フィールド/プロパティを介して一方から他方に移動することはできません。

JPA Criteria API を使用して、2 つのテーブルを結合するクエリを作成できますか?

インターネットで見つけたすべての例では、結合列を使用して目標を達成していますが、上記のように、ほとんどの場合、ABの関係に関心がなく、オーバーヘッドの可能性を恐れているため、コードから削除されました。 .

4

5 に答える 5

32

最初:外部キー関係はナビゲートだけではありません。それらは主に、関係に誤った値が導入されないようにするのに役立ちます。また、クエリの最適化のためにデータベースを支援することもあります。それを再考することをお勧めします。

とにかく、いくつかの無関係なエンティティを使用するクエリを作成するには、それらをfrom( root) エンティティとして配置する必要があります (SQL や JPQL で行うように)。

SELECT .... FROM Link l, Training t WHERE l.attribute = t.attribute;

Root<Link> rootLink = criteriaQuery.from(Link.class);
Root<Training> rootTraining = criteriaQuery.from(Training.class);
...
criteriaQuery.where(
    criteriaBuilder.equal(rootLink.get(link_.linkAttribute), trainingLink));
于 2013-06-14T10:34:32.750 に答える