Hibernate Annotations tips その1

| コメント(0) | トラックバック(0)

今まででちょっと詰まったところとかをまとめ。

○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;
}
}

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/655

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2007年11月29日 11:18に書いたブログ記事です。

ひとつ前のブログ記事は「Flexで背景をタイル状にする」です。

次のブログ記事は「JBoss Tools」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ