Domaせっかくjoinしたんだからオブジェクトにバインドしてほしいなーというアイデア
単純型にしかバインドできないのかー。
http://doma.seasar.org/tutorial/select.html#結合した結果を取得する検索
それなら次のように書けばdepartmentがまるごとバインドされるといいのになー。
@Entity public class EmployeeDepartment extends Employee { @Column(name = "d") Department department; ... }
select e.*, d.* from employee e left outer join department d on e.department_id = d.id order by e.id
Departmentも@Entityであればその中でのアノテーションで項目名や諸々分かっている状態だし…。
…んがしかしできない理由わかった。SQLの結果セットでのフィールド名では d.* は展開されて departmentのメンバーなのかなんなのか区別できんからだわー。
S2DaoだとN:1マッピング、Slim3だとModelRefでレイトバインディングする形で提供されているけど、Domaの思想には合わない感じがする。
複数SQL発行せずに最初の一発でjoinした情報で解決するのがDomaらしい形。Domaを選んだのもパフォーマンスのためなわけだったし。いろんなナンチャラコンテナの積み上げで掛かるwarmupがないから速いんだし。
名前が展開されちゃうから問題なので、次のようにSQL側できちんと1つ1つドット付きで名前付けしたならバインドできそう。
select e.*, d.departmentId as `d.departmentId`, d.name as `d.name`, d.xxxx as `d.xxx`, ... from employee e left outer join department d on e.department_id = d.id order by e.id
バインドして欲しい意思が強いSQL(笑)。でもこうやって明示化してるからコードとの対応も分かりやすいし。