[Seasar-user:4163] Re: [S2Dao] 複数テーブル JOIN の際の実装方法について。

kubo [E-MAIL ADDRESS DELETED]
2006年 7月 24日 (月) 13:21:02 JST


久保です。

> さっそくですが、
> テーブルA,B,C,Dの各項目よりデータを取得したい場合、主に取得するテーブルをAと
> すると、
> [AEntiy]クラスでは、
> ----------------------------
> 	public static final int bEntity_RELNO = 0;
> 	public static final int cEntity_RELNO = 1;
> 	public static final int dEntity_RELNO = 2;
> 	private BEntity bEntity;
> 	private CEntity cEntity;
> 	private DEntity dEntity;
> ----------------------------
> と定義しているのですが、
> 結果は、B,C,D三つのEntityともNULLとなってしまいます。
> 定義の仕方が悪いのか、

自分のS2Daoを利用してきた経験から助言させて頂きます。

パッと見ですが、
<A>
RELKEYSは指定されていますでしょうか?
RELNOだけでは有効では無いと思います。(単に例に載せてないだけ?)

<B>
また、もし、AEntityにpropertyとして、getBEntity();setBEntity();
というMethodを定義している場合、RELNOに指定する「プロパティ名」
は、bEntityではなく、BEntityではないかと思われます。
試しに、BEntityでやってみて頂けますでしょうか?

というのは、自分も大文字が先頭に2つ続くプロパティの場合、
bEntityではなく、BEntityと指定するとうまくいきました。

BeanDescImpl.decapitalizePropertyName()を見ると、
  if (name.length() > 1 && Character.isUpperCase(name.charAt(1))
            && Character.isUpperCase(name.charAt(0))) {
       return name;
  }
というように、大文字が2文字続いている場合は、そのままの値が
プロパティ名として戻ります。

自分、自動生成ツールで、RELNOやRELKEYSの設定を自動生成していますが、
  TS_NAME --> プロパティ名は、「tsName」
  T_NAME --> プロパティ名は、「TName」
となるようにして現状動作させています。




[http://s2dao.seasar.org/ja/s2dao.html#N1Mapping]
                                     の一部抜粋:
> N:1マッピングとは、複数の従業員の行に1つの部署の行が
> 関連付けられるような場合のマッピングです。
> N:1マッピングを使用するには、RELNO定数とRELKEYS定数を
> それぞれ宣言する必要があります。
> RELNO定数は以下の形式になります。
> 
> - public static final int プロパティ名_RELNO = 数値
> - public static final String プロパティ名_RELKEYS
>      = "N側のテーブルのカラム名: 1側のテーブルのカラム名";




-- 
kubo <[E-MAIL ADDRESS DELETED]>





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