[Seasar-user:8570] Re: CommonColumnSetupについて

kubo [E-MAIL ADDRESS DELETED]
2007年 6月 21日 (木) 22:25:17 JST


久保です。

多加谷さんへ

> > 例えば、AAAテーブルとBBBテーブルとあった時に:
> >
> > AAAテーブル
> > - AAA_UPDATE_DATE
> > - AAA_UPDATE_MODULE
> >
> > BBBテーブル
> > - BBB_UPDATE_DATE
> > - BBB_UPDATE_MODULE
> >
> > 共通列のカラム名にテーブル名が付与されるので、
> > 共通列ではあるけれども名前は同じにはならない(但し規則性はある)。
> >
> > という感じでしょうか?
> >
> > 確かに、DBFlute内でCommonColumnとして認識するには列名が同じで
> > ある必要があるので、現状では共通列とはできないですね。。。
> >
> >
> > torque.commonColumnMap = map:{ \
> >        ; $$TABLE_NAME$$_R_USER=VARCHAR
> >        ; $$TABLE_NAME$$_R_MODULE=VARCHAR
> >        ; $$TABLE_NAME$$_R_TIMESTAMP=TIMESTAMP \
> >    }
> >
> > という風に書いてCommonColumnとして認識できるようになったら
> > OKってことですよね?
> > (commonColumnSetupでも同様に記述)

途中経過報告ですが、以下のような感じでできそうです。

torque.commonColumnMap = map:{ \
       ; $-TABLE_NAME_R_USER=VARCHAR
       ; $-TABLE_NAME_R_MODULE=VARCHAR
   }


実際のテーブルには

AUTHORテーブル → AUTHOR_R_USER / AUTHOR_R_MODULE
BOOKテーブル   → BOOK_R_USER / BOOK_R_MODULE
...

というように定義されていて、
それぞれ

AUTHORテーブル → setAuthorRUser() / setAuthorRModule()
BOOKテーブル   → setBookRUser() / setBookRModule()

というようにEntityに定義されます。
(これはいつも通りの挙動です)

そして、EntityDefinedCommonColumnインターフェースですが、

setTableNameRUser() / setTableNameRModule()
というように定義されます。

それを実装するEntityは以下のように上記Methodを実装します。

[AUTHORだったら]
public void setTableNameRUser(String xxx) {
    setAuthorRUser(xxx)
}

[BOOKだったら]
public void setTableNameRUser(String xxx) {
    setBookRUser(xxx)
}

これにてInterceptorで統一的なMethodを通して、
各Entityの独自な列に対して値を設定することが可能です。


$-TABLE_NAME_R_USER は、 $-R_TABLE_NAME_USER でも構いません。
とにかくTABLE_NAMEという文字が置換されます。
カラム名が'_'区切りでない場合は、$-TableNameRUserと指定します。


ちょっと実現方法が複雑なので、もう少し確認などの調整が
必要ですのでしばらくお待ち下さい。



#
# 今後この機能は、「役割は共通列だけどTableによって少しだけ列名が違う」
# というような場合の回避機能として拡張させていきたいと思います。
#





Seasar-user メーリングリストの案内