読者です 読者をやめる 読者になる 読者になる

たぷつきません

おなかがでてきた。もうたぷついてるやん。

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(笑)。でもこうやって明示化してるからコードとの対応も分かりやすいし。