[Seasar-user:18523] Re: [S2JDBC]複数個の同じエンティティの結合がうまくいかない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 9月 26日 (土) 02:00:00 JST


小林 (koichik) です.

Date:    Fri, 25 Sep 2009 22:23:27 +0900
From:    岡部 央満 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:18521] [S2JDBC]複数個の同じエンティティの結合がうまくいかない

> SubTblエンティティ
(略)
> 	@OneToOne
> 	@JoinColumn(name="MAIN_ID", referencedColumnName="RID")
> 	public MainTbl mainEnt1;
> 	
> 	@OneToOne
> 	@JoinColumn(name="MAIN_ID", referencedColumnName="RID")
> 	public MainTbl mainEnt2;

これだと,RID と MAIN_ID が 1 対 1 になることを
示していますが,

> SUB_TBL
> ------------------------
> MAIN_ID, ORD, VALUE
> ------------------------
> 1	0	A
> 1	1	B
> 2	0	C
> 2	1	D
> 3	0	E
> ------------------------

ということなので実際には 1 対多になってますね.
それを

> 	List<MainTbl> result =
> 		jdbcManager.from(MainTbl.class)
> 		.leftOuterJoin("subEnt1" , "subEnt1.ord = 0")
> 		.leftOuterJoin("subEnt2" , "subEnt2.ord = 1")
> 		.getResultList();

の結合条件で絞り込んでいるだけで,関連としては
1 対 1 ではないことに注意してください.

なので,@OneToOne ではなく,@OneToMany
(MainTbl) と @ManyToOne (SubTbl) を使って
ください.

また,主キー (@Id) がないのはサンプルで省略
しただけでしょうか?


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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