Hibernate Annotations tips その1

今まででちょっと詰まったところとかをまとめ。
○Generation Gapパターン
Hibernateの入門用のこのページの4.2にGeneration Gapパターンについて紹介してある。
前提として既存のデータベースを使うという状況を想定。
詳細は省くとして、あるテーブルにアクセスするJavaオブジェクト(クラスA、通常は自動生成される)ってテーブル構造の変化によって変更しなきゃいけないんだけど、ユーザークラスがクラスAを直接使う場合、その都度ユーザクラスも変更しなければならない。それに対して、クラスAを継承したクラスBを作りユーザークラスはクラスBを使うようにすれば、テーブル構造の変化(=クラスAの変化)をクラスBで吸収できる、という感じ。
先ほどのページは通常のHibernateの場合だけど、Hibernate Annotationsを使った場合はどうなるか。
例えばこのページの用にデータベーススキーマからHibernate Annotationsを使ったコードを自動生成させるとして、でもそのクラスを直接ユーザークラスからは使わせたくない場合。


この場合、先ほどの例で言うクラスAがこんな感じになるように自動生成出来ればok。ポイントは@MappedSuperclass

@MappedSuperclass
public class BaseTableA {
@Id
@Column(name=”tableA_id”)
protected Integer tableAID;
@Column(name=”address_1″, length=20)
protected String address1;
}

で、それを継承するクラスB(手書き)はこんな感じ。外部からはプロパティaddress1だけにアクセスできるようにしてる。

@Entity
@Table(name=”table_a”)
public class TableA extends BaseTableA {
public String getAddress1() {
return address1;
}
public void setAddress1(String address1) {
this.address1 = address1;
}
}

コメントを残す

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