[Seasar-user:15713] Re: [S2JDBC]複数テーブルの結合

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 9月 9日 (火) 18:04:02 JST


小林 (koichik) 様

conpotaです。

できました!
回答ありがとうございました。

2008/09/09 18:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:

> 小林 (koichik) です.
>
> Date:    Tue, 9 Sep 2008 17:15:15 +0900
> From:    [E-MAIL ADDRESS DELETED]
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:15710] [S2JDBC]複数テーブルの結合
>
> > さらにテーブルを結合して
> > Two two =
> >
> jdbcManager.from(Two.class).innerJoin("oneTwo").innerJoin("oneTwo.oneList").where("name
> > = ?", "two1").getSingleResult();
> > とすると以下エラーになります。
> >
> エンティティ(One)のプロパティ(oneTwo)が不正です。JoinColumnのnameで指定されている外部キー(ONE_TWO_ID)が存在しません。
>
> > Oneエンティティ
> > @ManyToOne
> > public OneTwo oneTwo;
>
> One から OneTwo への関連が多対 1 なら,
> one から one_two への外部キーが必要ですが,
>
> > CREATE TABLE one(
> >   id SERIAL PRIMARY KEY,
> >   name VARCHAR(64) NOT NULL
> > );
>
> ありません.
> 「外部キー(ONE_TWO_ID)が存在しません」は
> そういう意味です.
>
> 実際は one_two テーブルが関連テーブルでしょうから,
> one テーブルに外部キーを持ちたいわけではなく,
> One#oneTwho の多重度の指定が間違っているのだと
> 思います.
>
> 例えば,関連テーブルを外して考えた場合に
> # '*' は多の側
>
> +-----+    +-----+    +-------+
> | One |*---| Two |---*| Three |
> +-----+    +-----+    +-------+
>
> としたい場合,関連テーブルを含めると
>
> +-----+    +--------+    +-----+    +----------+    +-------+
> | One |----| OneTwo |*---| Two |---*| TwoThree |----| Three |
> +-----+    +--------+    +-----+    +----------+    +-------+
>
> となります.
> また,関連は外部キーを持っている側が所有側なので,
> One,Two,Three の持つ関連は全て被所有側となり,
> mappedBy が必要になります.
>
> Oneエンティティ
> @OneToOne(mappedBy = "one")
> public OneTwo oneTwo;
>
> Twoエンティティ
> @OneToMany(mappedBy = "two")
> public List<OneTwo> oneTwoList;
> @OneToMany(mappedBy = "two")
> public List<TwoThree> twoThreeList;
>
> Threeエンティティ
> @OneToOne(mappedBy = "three")
> public TwoThree twoThree;
>
> OneTwoエンティティ
> @OneToOne
> public One one;
> @ManyToOne
> public Two two;
>
> TwoThreeエンティティ
> @ManyToOne
> public Two two;
> @OneToOne
> public Three three;
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>



-- 
conpota <[E-MAIL ADDRESS DELETED]>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20080909/180cc7a0/attachment-0001.html>


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