[Seasar-user:21483] [DBFlute]業務的one-to-oneの設定(別リレーションのカラム利用)
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2012年 10月 15日 (月) 08:58:55 JST
uparrowと申します。
.NETのDBFluteで
業務的one-to-oneを使おうと思っていますが、思ったデータが取得できずに困っています。
親の親の項目&自分の項目 と 別な親の2つの項目を
条件としてテーブルを結合させる必要があり、業務的one-to-oneの別リレーションのカラム利用
する方法でadditionalForeignKeyMapのプロパティに設定しました。
実際にデータの取得を試みると、発行されるSQLは想定通りなのですが
DBFluteのエンティティに設定される値が想定と異なるのです。
(結合条件に使用しているキーなのに、それぞれのテーブルのエンティティの項
目値がことなる。)
設定や、使用方法に誤りがあるのでしょうか?
アドバイスを頂戴できると助かります。
[テーブル]
(詳細は テーブル作成.txt、および、データ.xlsx)
親 T_A
子 T_A_MEI
親 T_A_MEI
子 T_B
親 M_KOUSEI
子 T_B ←自分のテーブル
親の親(T_A)のHINMOKU_CD & 自分(T_B)のPROC_NO
別な親(M_KOUSEI)のSEIHIN_HINMOKU_CD & PROC_NO
をキーとして結合したい。
クエリ発行後のM_KOUSEIのエンティティが想定の値と異なる。
[additionalForeignKeyMap]
; FK_T_A_MEI_01 = map:{
; localTableName = T_A_MEI ; foreignTableName = T_A
; localColumnName = SEIZO_ID ; foreignColumnName = SEIZO_ID
; fixedSuffix = BySeizoId
}
; FK_T_B_02 = map:{
; localTableName = T_B ; foreignTableName = T_A_MEI
; localColumnName = SEIZO_ID/SEIZO_LINE_ID ; foreignColumnName = SEIZO_ID/LINE_ID
; fixedSuffix = BySeizoIdSeizoLineId
}
; FK_T_B_A02 = map:{
; localTableName = T_B ; foreignTableName = M_KOUSEI
; localColumnName = PROC_NO ; foreignColumnName = PROC_NO
; fixedCondition =
$$over($localTable.TAMeiBySeizoIdSeizoLineId.TABySeizoId)$$.HINMOKU_CD = $$foreignAlias$$.SEIHIN_HINMOKU_CD
; fixedSuffix = AsKousei
}
[データ取得ソース]
[Test, Quill(Tx.Rollback)]
public void FindTest()
{
TBCB cb = new TBCB();
cb.SetupSelect_TAMeiBySeizoIdSeizoLineId().WithTABySeizoId();
cb.SetupSelect_MKouseiAsKousei();
cb.Query().AddOrderBy_ShijiId_Asc();
ListResultBean<TB> dbEntityList = tBBhv.SelectList(cb);
foreach (TB dbEntity in dbEntityList)
{
if (dbEntity.TAMeiBySeizoIdSeizoLineId.TABySeizoId.HinmokuCd != dbEntity.MKouseiAsKousei.SeihinHinmokuCd ||
dbEntity.ProcNo != dbEntity.MKouseiAsKousei.ProcNo)
{
Assert.Fail();
}
}
}
[発行されるSQL]
select dfloc.SHIJI_ID as c0, dfloc.SEIZO_ID as c1, dfloc.SEIZO_LINE_ID as c2, dfloc.PROC_NO as c3
, dfrel_0.SEIZO_ID as c4, dfrel_0.LINE_ID as c5
, dfrel_0_0.SEIZO_ID as c6, dfrel_0_0.HINMOKU_CD as c7
, dfrel_1.SEIHIN_HINMOKU_CD as c8, dfrel_1.PROC_NO as c9, dfrel_1.BUHIN_NO as c10, dfrel_1.KANAGATA_CD as c11
from T_B dfloc
left outer join T_A_MEI dfrel_0 on dfloc.SEIZO_ID = dfrel_0.SEIZO_ID and dfloc.SEIZO_LINE_ID = dfrel_0.LINE_ID
left outer join T_A dfrel_0_0 on dfrel_0.SEIZO_ID = dfrel_0_0.SEIZO_ID
left outer join M_KOUSEI dfrel_1
on dfloc.PROC_NO = dfrel_1.PROC_NO
and dfrel_0_0.HINMOKU_CD = dfrel_1.SEIHIN_HINMOKU_CD
order by dfloc.SHIJI_ID asc
( dfrel_0_0.HINMOKU_CD,dfloc.PROC_NO と dfrel_1.SEIHIN_HINMOKU_CD,dfrel_1.PROC_NO
は想定の値が抽出されている。)
バージョン
dbflute-0.8.9.43 (.NET版)
データベース
SQL Server 2008
以上、よろしくお願いいたします。
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 資料.zip
型: application/x-zip-compressed
サイズ: 9193 バイト
説明: 無し
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20121015/6ba37214/attachment.bin>
Seasar-user メーリングリストの案内