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

kuwata [E-MAIL ADDRESS DELETED]
2010年 12月 4日 (土) 10:09:01 JST


お世話になります、桑田です。

実際は 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 メーリングリストの案内