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

kubo [E-MAIL ADDRESS DELETED]
2010年 12月 4日 (土) 03:57:40 JST


久保(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 メーリングリストの案内