一対多関連を試してみたが、、、
S2JDBCの一対多関連を試そうと思って以下のようなメソッドを書いてみました。
public Dept findWithEmps(Integer id) { return jdbcManager.from(Dept.class) .join("emps") .where("id = ?", id) .getSingleResult(); }
テストメソッドはこんな感じ。
public void testFindWithEmps() { Dept dept = deptService.findWithEmps(2); /* * dept.emps は Deptクラスで以下のように定義 * * @OneToMany(mappedBy = "dept") * public List<Emp> emps; */ assertEquals(3, dept.emps.size()); }
実行してみると、次のような例外。
org.seasar.extension.jdbc.exception.SNonUniqueResultException: [ESSR0326]クエリ(select T1_.ID, T1_.NAME, T1_.VERSION_NO, T2_.ID, T2_.NAME, T2_.HIRE_DATE, T2_.DEPT_ID, T2_.VERSION_NO from DEPT T1_ left outer join EMP T2_ on T2_.DEPT_ID = T1_.ID where (T1_.ID = ?))がユニークな結果を返しませんでした。
原因を調べるために、コンソールに吐かれたSQL文を加工して
パラメータ(?)に 2 という値をセットしたものを対話ツールで実行。
ID | NAME | VERSION_NO | ID | NAME | HIRE_DATE | DEPT_ID | VERSION_NO |
2 | RESEARCH | 1 | 1 | SMITH | 1980-12-17 | 2 | 1 |
2 | RESEARCH | 1 | 4 | JONES | 1981-04-02 | 2 | 1 |
2 | RESEARCH | 1 | 8 | SCOTT | 1982-12-09 | 2 | 1 |
データ的には問題なさそうですが、何がおかしいのだろうか?