[Seasar-user:20382] Re: DBFluteのadditionalForeignKeyについて

kubo [E-MAIL ADDRESS DELETED]
2010年 12月 4日 (土) 10:58:49 JST


久保(jflute)です。

桑田さん、情報提供ありがとうございます。
引き続きこちらでもテストパターンを試していますが、
再現できていない状況です。

>  MembernのEntitiyプロパティ
>       Member.MstClassAsFoo
>       Member.MstClassList
>  MstClassのEntitiyプロパティ
>       MstClass.Menber

設定が、一つだけにも関わらず、
A. Member to MstClass の AsFoo
B. MstClass to Member
の二つのリレーションが定義されてしまっているということは、
"B" が additionalForeignKeyMap.dfprop のどこかに潜んでいる
ということはないでしょうか?(一応、確認お願いします)
また、AsFoo の設定を除去しても "B" のメソッドは存在するでしょうか?

また、AsFooとAsHogeHoge両方を定義した場合、
Entityのプロパティ構成はどのようになりますでしょうか?

2010/12/4 kuwata <[E-MAIL ADDRESS DELETED]>:
> お世話になります、桑田です。
>
> 実際は dbflute-0.8.9.18を利用して開発しております。
> このバージョンでエラーになっため、 dbflute-0.8.9.21
> を利用してみた所、同様のエラーとなりました。
>
> リレーションコードですが、多重に出力されているのは
> Bhvクラス Pullout~
> CBクラス   ~CBSpecification   ~SpQyCall
> など、関連する部分は全て多重出力されている模様です。
>
> 尚、設定が一つだけの場合はエラーになりませんが、fixedCondition
> を使用しているにも関わらずEntitiyは下記の状態になります。
>
>  MembernのEntitiyプロパティ
>       Member.MstClassAsFoo
>       Member.MstClassList
>  MstClassのEntitiyプロパティ
>       MstClass.Menber
>
> 上記の様なEntitiyプロパティとなった為、、逆リレーションコードが
> 生成されると判断しました。
> 宜しくお願いします。
>
> # 今回はおっしゃる通り「All-in-Oneテーブル区分値」に対して、
> # fixedCondition を使用しています。業務的many-to-one ですね。
> # 但し、テーブル構造の改善が行えないため、困っております、
>
>> 久保(jflute)です。
>>
>> 今回のケースは、(恐らく)業務的one-to-oneではなくて、
>> 「業務的many-to-one」ですね。本来、MEMBERが保持すべき
>> それぞれのGROUP_CODEを補完するために、fixedCondition を
>> 使っている、というところでしょうか。
>>
>> fixedConditionを利用した場合は逆リレーションコードは生成されない、
>> という認識は合っています。実際に Example では「業務的one-to-one」と
>> 「業務的many-to-one(さきほど作ったばかり)」を試していますが、
>> 逆リレーションコードは生成されていません。また、fixedCondition を
>> コメントアウトすると、確かに逆リレーションコードは生成されますが、
>> プロパティ名に fixedSuffix が付くので、コンパイルエラーにはなりません。
>>
>> ということで、論理的な追っかけをしてもコンパイルエラーの原因が
>> 不明なところです。先に言った情報提供をお願いします。
>>
>> #
>> # ちなみに、まさしく「All-in-Oneテーブル区分値」に対して、
>> # fixedCondition を使おうとしている感じでしょうか!?
>> # できれば、All-in-Oneテーブル区分値をやめるか、
>> # それぞれのGROUP_CODEもMEMBERなどに定義する
>> # ように変更するのがお奨めです。
>> # http://d.hatena.ne.jp/jflute/20091215/1260865365
>> #
>>
>> 2010/12/4 kubo<[E-MAIL ADDRESS DELETED]>:
>>>
>>> 久保(jflute)です。
>>>
>>>> て関連付くのですが、MST_CLASSからMEMBERへの逆リレーションまで生成してい
>>>> る模様です。このためMST_CLASSからMEMBERのリレーションコードが二重に出力
>>>> され、エラーの原因になっていると思われます。
>>>
>>> また、リレーションコードは、具体的には、
>>> どのクラスのどのメソッドでしょうか?
>>> (例えば、Entity の getXxxList() メソッドなど)
>>>
>>> そして、業務的one-to-oneが一つだけの場合は
>>> コンパイルエラーにはならないのでしょうか?
>>>
>>> 2010/12/4 kubo<[E-MAIL ADDRESS DELETED]>:
>>>>
>>>> 久保(jflute)です。
>>>>
>>>> 桑田さん、こんばんは
>>>>
>>>> 取り急ぎですが、確認させて下さい。
>>>> この現象は、
>>>> DBFlute.NET-0.8.9.21 にアップグレードした発生したのか?
>>>> それとも DBFlute.NET-0.8.9.21 で初めてこの設定をして
>>>> 発生したのか、どちらになりますでしょうか?
>>>>
>>>> 2010/12/4 N.Kuwako<[E-MAIL ADDRESS DELETED]>:
>>>>>
>>>>> お世話になっております。
>>>>> 桑田と申します。
>>>>>
>>>>> 現在、DBFluteを使用して、開発を行っております。
>>>>> DBFlute.NET-0.8.9.21において、additionalForeignKeyのfixedCondition
>>>>> を利用して業務的one-to-oneを実現しております。
>>>>> 下記のような設定をadditionalForeignKeyに記述してjdbc.bat、generate.batを
>>>>> 実行してビルドを行った結果、エラーとなってしまいます。
>>>>>
>>>>> map:{
>>>>>    ; FK_MEMBER_FOO_MST_CLASS = map:{
>>>>>        ; localTableName = MEMBER
>>>>>        ; foreignTableName = MST_CLASS
>>>>>        ; localColumnName = FOO_CODE ; foreignColumnName = CLASS_CODE
>>>>>        ; fixedCondition = $$foreignAlias$$.GROUP_CODE = 'foo'
>>>>>        ; fixedSuffix = AsFoo
>>>>>
>>>>>    }
>>>>> }
>>>>>
>>>>> map:{
>>>>>    ; FK_MEMBER_HOGE_MST_CLASS = map:{
>>>>>        ; localTableName = MEMBER
>>>>>        ; foreignTableName = MST_CLASS
>>>>>        ; localColumnName = HOGE_CODE ; foreignColumnName = CLASS_CODE
>>>>>        ; fixedCondition = $$foreignAlias$$.GROUP_CODE = 'hogehoge'
>>>>>        ; fixedSuffix = AsHogehoge
>>>>>
>>>>>    }
>>>>> }
>>>>>
>>>>> 調べた結果、MEMBERからMST_CLASSへのリレーションはfixedSuffixを元に分離し
>>>>> て関連付くのですが、MST_CLASSからMEMBERへの逆リレーションまで生成してい
>>>>> る模様です。このためMST_CLASSからMEMBERのリレーションコードが二重に出力
>>>>> され、エラーの原因になっていると思われます。
>>>>> fixedConditionを利用した場合は業務的one-to-oneとなり、逆リレーションコー
>>>>> ドが出力されないと認識していたのですが、何か間違っているのでしょうか
>>>>>
>>>>> 大変申し訳ございませんが、ご教示いただければ幸いです。
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Seasar-user mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>


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