[Seasar-user:10192] Re: [DBFlute]CommonColumnSetupの仕様について
Yu Tagaya
[E-MAIL ADDRESS DELETED]
2007年 8月 29日 (水) 22:13:55 JST
久保さん
多加谷です。
情報ありがとうございます。
いずれかの方法で検討します。
ちなみに、C案で行くとしたらソースの場所はどこですか?
> 久保です。
>
> 多加谷さん、こんばんわ
>
>> CommonColumnSetupの仕様について質問します。
>>
>> CommonColumnSetupに指定したカラムの一部だけを含むエンティティ
>> について、CommonColumnSetupは実行されるのでしょうか?
>>
>> (もし実行されない場合、ソースコードの修正で対応できるでしょうか?)
>
> 残念ながら、今の仕様では、
> 「共通列として設定された列を全て含むテーブルが対象」
> となります。一部だけを含むものは対象となりません。
>
> ですが、回避策がいくつか考えられます。
>
>
> <A>
> そのカラムの一部だけを含むテーブルは、数多いでしょうか?
> もし、すくないのであれば、
>
> BehaviorにfilterEntityOfInsert()というprotectedのMethodが
> いるのですが、そのメソッドをOverrideして、
>
> @Override
> protected void filterEntityOfInsert(Entity targetEntity) {
> final MyEntity entity = (MyEntity)targetEntity;
> entity.setTargetColumn(xxx);
> }
>
> とすると、CommonColumnのInterceptorと同じ効果となります。
>
> Updateの場合は同様にfilterEntityOfUpdate()をOverrideすればOKです。
>
> Behaviorの各SubClassにて同じようなOverrideメソッドが
> 出来上がってしまいますが、数が多くなければ手っ取り速いです。
>
>
> <B>
> こちらも数が少ないほうが楽なのは当然ですが、
> CommonColumnのSetupは、実際にDBにその列が定義されているか否かではなく、
> EntityDefinedCommonColumnをimplementsしている否かで決定します。
> なので、該当のExEntityにて、EntityDefinedCommonColumnを実装すれば、
> CommonColumnのSetupの対象Entityとなり得ます。
> 存在していない列のGetter/Setterは呼び出されても何もしないようにすれば、
> InterceptorからSetされても無視されるだけになります。
> (試してないので恐縮ですが。。。)
>
>
> <C>
> 「A」・「B」ダメなら(数が多いとか)、
> ソースを書き換えるしかありません。
> Interceptorにて、EntityDefinedCommonColumnでないEntityは即return
> しているのですが、そこを「ReflectionでSetterが存在すれば設定する」
> という処理を入れてあげればいけそうです。
>
>
> #
> # DBFlute自体も現実のDBで結構こういうパターンがあり得るので、
> # 「C」の修正を検討しています。
> #
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内