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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 9月 9日 (火) 17:15:15 JST


conpotaと申します。

S2JDBCを試しています。
以下テーブルがあったとして、

CREATE TABLE one(
  id SERIAL PRIMARY KEY,
  name VARCHAR(64) NOT NULL
);
insert into one(name) values('one1');
insert into one(name) values('one2');

CREATE TABLE two(
  id SERIAL PRIMARY KEY,
  name VARCHAR(64) NOT NULL
);
insert into two(name) values('two1');
insert into two(name) values('two2');

CREATE TABLE three(
  id SERIAL PRIMARY KEY,
  name VARCHAR(64) NOT NULL
);
insert into three(name) values('three1');
insert into three(name) values('three2');

CREATE TABLE one_two(
  id SERIAL PRIMARY KEY,
  one_id INTEGER NOT NULL,
  two_id INTEGER NOT NULL,
  FOREIGN KEY (one_id) REFERENCES one (id),
  FOREIGN KEY (two_id) REFERENCES two (id)
);
insert into one_two(one_id, two_id) values(2, 1);
insert into one_two(one_id, two_id) values(2, 2);

CREATE TABLE two_three(
  id SERIAL PRIMARY KEY,
  two_id INTEGER NOT NULL,
  three_id INTEGER NOT NULL,
  FOREIGN KEY (two_id) REFERENCES two (id),
  FOREIGN KEY (three_id) REFERENCES three (id)
);
insert into two_three(two_id, three_id) values(1, 1);
insert into two_three(two_id, three_id) values(2, 1);

これらのエンティティクラスの関連プロパティを以下のように書きました。

Oneエンティティ
@ManyToOne
public OneTwo oneTwo;

Twoエンティティ
@OneToOne(mappedBy = "two")
public OneTwo oneTwo;
@OneToOne(mappedBy = "two")
public TwoThree twoThree;

Threeエンティティ
@ManyToOne
public TwoThree twoThree;

OneTwoエンティティ
@OneToOne
public Two two;
@OneToMany(mappedBy = "oneTwo")
public List<One> oneList;

TwoThreeエンティティ
@OneToOne
public Two two;
@OneToMany(mappedBy = "twoThree")
public List<Two> twoList;

そしてServiceクラスで以下のように
Two two = jdbcManager.from(Two.class).innerJoin("oneTwo").where("name = ?",
"two1").getSingleResult();
すると意図通りの結果が取得できます。
さらにテーブルを結合して
Two two =
jdbcManager.from(Two.class).innerJoin("oneTwo").innerJoin("oneTwo.oneList").where("name
= ?", "two1").getSingleResult();
とすると以下エラーになります。
エンティティ(One)のプロパティ(oneTwo)が不正です。JoinColumnのnameで指定されている外部キー(ONE_TWO_ID)が存在しません。
最終的に全てのテーブルをinnerJoinしたいのですが、
どうすればよいでしょうか?

よろしくお願い致します。

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


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