[seasar-s2dao-dev:370] Re: メタデータを使わずにプロパティからカラムの名前を決定できるようにする

JUNDU [E-MAIL ADDRESS DELETED]
2007年 8月 3日 (金) 12:46:53 JST


JUNDUです。

Hirotaka HONMA wrote:
> > > > > Beanに複数のIDアノテーションを持たせるようにして、
> > > > > それぞれに指定された方法で採番してしまってもいいのかもしれないですね。
> > > >
> > > > 「メインのID」のみをPKにすれば良いと思うのですけれど。
> > > > (S2Daoが解決する問題なのかなあ...)
> > > 
> > >  うぅ、私の周辺では複合主キーの方が多いようです。。。
> > 
> > 現在IDアノテーションがついているとメタデータにアクセスしませんが、
> > IDアノテーションが使えるのは単一の主キーの場合だけです。
> > そこでIDアノテーションを複合主キーのときにも使えるようにして
> > 複合主キーの場合にもメタデータにアクセスしないようにしたい、
> > というのが第一の狙いです。
> > 
> > そうすると次のようなコードが書けるようになります。
> > それぞれのIDアノテーションにIdTypeを指定できるので
> > それに従って採番するのが自然かなと思います。
> > 
> > @Id(value=IdType.SEQUENCE, sequenceName="HOGE_SEQ")
> > public setAaaId(...){}
> > 
> > @Id(value=IdType.ASSIGNED)
> > public setBbbId(...){}
> 
> まだよくわかっていないので整理させてください。
> 
> このケースでは、
> 
>   AAA BBB XXX
>   --- --- ---
>     1   1   A
>     2   2   B
>     3   3   C
>     4   4   D
> 
> みたいな採番になりませんか? AAA・BBBともにIDアノテーションが
> 付いていますから。
> そうだとAAAだけでユニークになりますから、「複合主キーで一部
> のキーはシーケンスから採番」というテーブルにする必要性が無い
> のではと思ったのです。
> (採番している方だけを主キーにすれば良いのでは、と。)
> 
> もしくは、↓のようなレコードを作成したいのかもしれませんが、
> S2Daoでどう実現したものか思いつきません :-)
> 
>   AAA BBB XXX
>   --- --- ---
>     1   1   A
>     1   2   B
>     1   3   C
>     2   1   D
>     2   2   E
>     2   3   F

 複合主キー自体は、テーブル定義の話なので、可能な限りS2Daoでもサポートしていきたい
という気がします。新しく作るときでも現場の文化によって、どうしても複合主キーになる
ことがあるでしょうし。

 複合主キーで、そのうちの1つが自動採番というイメージは、例えば以下のようなものが
想定できると思います。

   AAA BBB    XXX
   --- ------ ---
     1 200707   A
     2 200707   B
     3 200707   C
     4 200708   D

 自動採番部分のカラムの桁数が小さく(例えば4桁とか)なっていて、回ってもかぶらない
ように採番した年月を複合カラムで保持するような。。。

 あとは、ID自体はサーバ単位で一意なので、複数サーバがあるときにサーバの識別子とIDを
複合キーにしておいて、別サーバにデータコピーしても平気にしたりとか。。。

 ちょっとやりすぎかなと思うのは、Oracleのようにシーケンスオブジェクトで採番するタイ
プで、カラムごとに別々のシーケンスオブジェクトから番号をとるパターンでしょうか。これ
は、さすがに少ない気がします。。。


seasar-s2dao-dev メーリングリストの案内