skillup

技術ブログ

Database Java

JPAでのリレーション(アノテーション使用)

投稿日:

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。

JPAでのリレーションに関して

外部キー制約があるやり方はしっていたんですが、ないときの対処法はわからずじまいでした。

が、いろいろ試してみたところアノテーションでさっくりいけることが判明。

メモしておきます。

多対多は試していないんですが、1対多となる2つのパターンは確認できました。

1対多

1つ目は注文テーブル(sample_order)と注文詳細テーブル(orderline)のようなパターン

この場合、

注文詳細テーブル側が注文テーブルに属しており、どの注文テーブルにひもづけられるのか?というidをもっていることが一般的です。(今回はorder_idとします。)

sample_order がidだけをもち、

orderlineはid,item,price,order_idだけのテーブルだとします。

ブログなんかでユーザー→そのユーザーのコメントなんかがこのパターンですね。

サンプルが一番わかりやすいと思うので下記に紹介します。

SampleOrder.java

OrderLine.java(通常のエンティティを書けばよく、特別なことは書く必要なし)

これだけでSampleOrderのエンティティを取得すると、同時にOrderlineも取得できます。

多対1

もう一つは注文詳細テーブル-商品テーブルパターンです。

注文詳細側が商品テーブルのidを別名(product_id)でもっているパターンです。

注文詳細側をid,order_id,prooduct_id

商品テーブル側をid,name,priceで構成されているとします。

その場合下記のようになります。

OrderLine.java

Product.java(基本的にリレーションに関する情報はかかなくてOKです。)

組み合わせることでSampleOrderを取得すればProductまで一気に取得できます。

長年の悩みがやっと解けました・・・が、半年前に気づけてればよかったです(汗)。

ただ、超簡単なSELECTのリレーションしかやってないのでinsertのときとかはまたいろいろと調べることになりそうです。

-Database, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Glassfishの暴走に関して

JavaEEのアプリケーションサーバーではglassfishを使っているんですが、 メモリをかなり食うのと、頻繁に暴走してIDEからの処理を一切受け付けなくなることが多いです。 まだまだ全然対処法がわ …

no image

あるMapを元にして別のMapを作成

超小ネタ あるMapから別のMapを作る方法です。あるMapをもとに別のMap2を作るときです。 Map<String, String> Map2 = new HashMap<&gt …

no image

netbeansのJPQL補助機能

JPAでは基本的に生のSQLではなく、JPQLを使って書きます。 SQLでもタイプミスにイライラさせられることは多いのですが、JPQLはもっとですね・・・爆 そこで使えるのがNetbeansの入力補助 …

no image

自己結合に関して

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。 下記のようなテーブルProductsがあるとします。 name | price ——&# …

no image

配列からListへの変換

配列からListにしたいとき、ループでいちいち回さなくても下記の処理で一気にListに変換できます。

Netbeansに教えてもらいま …