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

エンティティの抽出と主キー決定

主に設計に関することのメモ。 Contents1 業務フロー分析2 エンティティの抽出3 エンティティの関連付け4 主キーの抽出を行う4.1 主キーの特徴4.2 サロゲートキーのメリット4.3 サロゲ …

no image

配列の参照の仕方

変数が存在しているにもかかわらず値が入っていないときは、プログラミングではNULLという表記をします。(ちなみに空白が入っているのとは違います。) これはプログラマにとってはほぼ常識的な内容なのですが …

no image

日付がらみの処理に関して(MySQL&Java)

MySQL触りだして3年ぐらいたつんですがいまだに整理できないことが多いです。(特に日付がらみ) ちょっとJavaのネタと合わせて整理しておこうかなーと思います。 Contents1 MySQLの日付 …

no image

MySQLのマイグレーション(workbench使用)

以前cakePHPにてマイグレーションの手法を紹介したのですが、当然PHP以外をつかっていたり、PHPでもcakeを使っていなければこの方法は通用しません。 何か、汎用的にデータベースの構造の差分がチ …

no image

Annotationについて

Javaのアノテーションですが、よく出てくる割には場面場面でよくでてくるんですけど、根本的にはよく理解できていませんでした。 今もあまりわかっていませんが・・・やはり理解するためには自分で作成するのが …