【JPA】リレーションの無いエンティティをJPQLで結合する

当ページのリンクには広告が含まれています。
目次

概要

@ManyToOneや@OneToManyといったリレーションをエンティティに設定していないまたは設定できない状況にあるが、結合した結果を取得したいという状況を想定しています。

方法としては「JOIN ON」を使います。
NativeQueryとはほんの若干だけ記述が違いがあります。

実装

エンティティ

ItemとCategoryがあるとします。
ItemにCategoryIdを持ちますがリレーションはありません。

レポジトリ

JPQLとnativeQueryの例を同時に記載しています。

■JPQLがNativeQueryと異なる箇所
・クエリ上のテーブル名はEntityアノテーションのname属性に一致する必要があります。
・SELECT句には取得対象のエンティティを指定しますが、その際に「.*など」でカラムの指定は不要です。

まとめ

  • JPQLにおいてもJOIN ON句の構文はNativeQueryと同じ。
  • テーブル名はエンティティのname属性と一致させる。
  • フィールドの指定は不要。

参考

【JPA徹底入門】JPQLによる検索処理 – JOIN ON

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次