[seasar-dotnet:1829] Re: [DBFlute.NET]業務的one-to-oneな条件に他テーブルのカラム値指定
kubo
[E-MAIL ADDRESS DELETED]
2010年 10月 7日 (木) 23:04:23 JST
久保(jflute)です。
fpさん、こんばんは
なるほど、日付が外部から与える値ではなく、
別のリレーションのテーブルのカラムであると。
現状の fixedCondition では、そもそも local, foreign 以外の
テーブルのカラムを指定することができないので、
実現できないはずです。
無理矢理、dfrelation_1.ORDER_DATE というように、
発行させるSQLとつじつまの合うエリアス名を付ければ
できるかもしれませんが、DB変更など何かの拍子に
動かなくなります。
やるなら、例えば仮に以下のように、
and $$foreignAlias$$.VALID_END_DATE
>= $$rel(order)$$.ORDER_DATE
order というリレーションが指定されていることが前提で、
実行時に適切なエリアス名に変換されるようにする、
というところですが、ややこしい点が一つあります。
このままだと、Item を基点にした場合に利用できない
リレーションになってしまいます。
(OrderItemCB を new することが前提になってしまう)
A. 割り切って専用のリレーションにする
(Item基点で利用したい場合は、別途リレーションを定義)
B. ハイブリッド方式
(dfprop の設定でIFコメントみたいなのを使えるように)
Aは、その分例外処理をしっかり。
リレーションの名前は任意でdfpropにて付けられるので、
OrderDateを使ったリレーションを、例えば
「FK_XXX_AS_ORDER_DATE」とするとか。
Bは、そもそもどうやってハイブリッドにしようか。
(setupSelectの引数の型とか色々考えると良い手がない...)
現実的にはとりあえず「A」ができれば、fpさんの要件は
満たせるのかなと思いますが、どうでしょうか?
(そもそもBは、Aの後付けでも良いわけだし)
また、明日・明後日できないと困る、
というような話でしょうか?
2010/10/7 fp <[E-MAIL ADDRESS DELETED]>:
> お世話になります。fpと申します。
>
> DBFlute の「業務的one-to-one」の fixedCondition に
> 親の親のテーブルのカラム値を与えたい、という場合
> 皆さんはどう解決されているのでしょうか?
>
> 例として、
>
> Order (1) -> OrderItem (n) -> Item (1) -> ItemPrice (n ,but BizOneToOne)
>
> な関連で
>
> OrderItem の List を取得にする場合に
> Order.OrderDate で一意に特定される ItemPrice を
> 一緒に取得する。
>
> 業務的にはかなり一般的な状況だと思うのですが。
>
> fixedCondition というよりは、サブクエリを含む
> 結合処理全般に絡む話ですが。
>
> OutsideSQL でやるしかないでしょうか?
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
seasar-dotnet メーリングリストの案内