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

配列からListへの変換

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

Netbeansに教えてもらいま …

no image

JAXRSによるRESTAPI作成方法

業務でJavaによりWEBAPI(Rsetful API)を作成する機会ががあったのでちょっとメモしておきます。 Contents1 RestAPIとは2 プログラムの作成方法について RestAPI …

no image

joinとeager loading

フレームワークでデータをORMがらみでjoinするときのネタ。 自分の場合はLaravel。他のフレームワークでも考え方は通じるものあるかと・・ Contents1 通常のjoin2 ループの中で取得 …

no image

JSF+ajax

JSFでajaxを使うときにいろいろと調べたのでメモ。 やろうとしたことはWEB上で給与明細の計算をしたくて、プルダウンで月の変更したら自動的に経費が該当月に替わるというシステムです。 ajaxを使う …

no image

JavaでのSQLの書き方

ちょっと小ネタです。 通常SQLを記述する場合、縦に分けて書くのが見た目にも見やすく、保守性も高いです。 例として

と書くよりは、 [ …

アーカイブ