ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 JPA その4

その3のつづき。

JPAプロジェクトにクラスを追加する。
DBのテーブルと対になるクラス(エンティティクラス)を追加する。
要はDBデータを格納するクラスだね。

手作りしてもいいけれど、
ツールから自動生成する方法を学ぶのが目的なので、
Eclipseからの自動生成をやってみる。

ちなみに用意したテーブルは以下の2つ。
書くまでもないが、WARSHIPテーブルは艦艇テーブル。
WARSHIP_TYPEは艦種テーブル。WARSHIPとWARSHIP_TYPEはTYPE_IDで紐づく。
f:id:nagamitsu1976:20151001170537p:plain

[テーブルのDDL](クリックで開く)

  • 艦艇テーブル
CREATE TABLE PUBLIC.WARSHIP
(
    ID                          INTEGER NOT NULL,
    TYPE_ID                     INTEGER,
    NAME                        VARCHAR(100),
    CONSTRAINT WARSHIP_PK PRIMARY KEY (ID),
    CONSTRAINT SYS_IDX_WARSHIP_PK_10092 UNIQUE (ID)
);
CREATE TABLE PUBLIC.WARSHIP_TYPE
(
    TYPE_ID                     INTEGER NOT NULL,
    NAME                        VARCHAR(100),
    CONSTRAINT WARSHIP_TYPE_PK PRIMARY KEY (TYPE_ID),
    CONSTRAINT SYS_IDX_WARSHIP_TYPE_PK_10091 UNIQUE (TYPE_ID)
);

1. 利用DBの選択
JPAプロジェクトのプロパティを出して、サイドツリーからJPAのカテゴリを選択。
接続のプルダウンから対象の接続情報を選択する。
これはデータソースエクスプローラに登録している接続情報がプルダウンに表示されている。
接続情報を選択したら、下の「接続」アンカーを押して、DBへ接続する。
その後、「接続からデフォルトカタログを上書き」、「接続からデフォルト・スキーマをオーバーライド」のチェックを有効にして、それぞれのプルダウンから適切なものを選択する。
適用ボタンを押して、設定画面を閉じる。
f:id:nagamitsu1976:20151001111347p:plain
2. テーブルからエンティティを生成を選択
JPAプロジェクトを選択し、コンテキストメニューから「JPAツール」→「テーブルからエンティティを生成」を選ぶ。f:id:nagamitsu1976:20151001111634p:plain
3. テーブルの関連付け
追加ボタンからテーブルの関連付けを登録する。
f:id:nagamitsu1976:20151001172305p:plain
"単純な関連付け"を選び、表1とテーブル2を選ぶ。
ここではWARSHIPテーブルとWARSHIP_TYPEテーブルの関連を作成する。
f:id:nagamitsu1976:20151001172329p:plain
テーブル間の紐付けるカラムを追加する。
f:id:nagamitsu1976:20151001172744p:plain
WARSHIPのTYPE_IDからWARSHIP_TYPEの1レコードが特定できるため、
関連付けの基数は1対1を選択する。f:id:nagamitsu1976:20151001172852p:plain
完了を押すと関連付けが登録される。
f:id:nagamitsu1976:20151001173304p:plain
追加された関連付けを選択し、生成する関連付け情報を選ぶ。
Warshipクラス→WarshipTypeクラスの関連付け、WarshipTypeクラス→Warshipクラスの関連付けから選べる。
艦艇クラスと艦種クラスの主従を考えると艦艇クラスが主、艦種クラスが従となるので、
Warshipクラス→WarhipTypeクラスの関連付けのみ生成する。
ちなみに両方選択すると、参照時にエラーが発生する。*1f:id:nagamitsu1976:20151008160122p:plain
4. エンティティのカスタマイズ1
キージェネレータの設定だとか、出力するクラスのパッケージ名などを決める。
f:id:nagamitsu1976:20151001173855p:plain
5. エンティティのカスタマイズ2
エンティティごとにプロパティ名だとかマッピングの際の型だとかを決定する。
テーブルの属性により適切な型が自動的に選択されてはいる。
IntegerをBigIntegerにしたいとかそんな時に手動で変えるのだろう。
f:id:nagamitsu1976:20151001174034p:plain
6. 完了
完了ボタンを押すとJavaクラスが自動生成される。
アノテーションを除けばテーブル構造に近いPOJOなクラスができている。
f:id:nagamitsu1976:20151001174511p:plain

といったところで、エンティティの自動生成は終わり。
テーブルがあっさりしたものなので、生成の設定も簡単だった。

これをどう使用するとDB参照できるのかについては、
次回以降に続く。

*1:というのも、艦種から艦艇を一意に抽出できないことが原因のよう。"More than one row with the given identifier was found"なんてエラーが出る。