S2Dao.NetでTable定義と異なるEntityを使う方法
Seasar.NetのS2Dao.NetでDaoにSql属性を付与してSelect文を書きたかったのだけど、Entityとは異なる(複数テーブルをJoinした)形で書きたかったのでその方法をメモ。
例えば、こんなSQL
select t1.id, t21.value option_value, t22.value additional_value from tabel1 t1 left outer join tabel2 t21 on (t1.id = t21.id and t21.type='1') left outer join tabel2 t22 on (t1.id = t22.id and t22.type='2')
このようなものはEntityクラスにRelkeys属性を振って表現するのが困難です。
上記のSELECT句をVIEWにしてもよいのですが、table2.typeに指定する値をプログラムで一括定義しておきたいのであまりDB側で値に意味を持たせたくありません。
そこでやったこと
EntityのTable属性に適当なテーブル(この例ならtable2とか)を割り振った以下のようなクラスを作ります。
[Table("table2")] public class TablleView { public int Id { get; set; } public int OptionValue { get; set; } public int AdditionalValue { get; set; } }
そして、上記のTaleViewクラスをBean属性に定義したDaoインターフェイスで最初のSQLをSql属性に書いてあげればTableViewクラスを値として取得できます。
ただし、EntityとDB上の定義が異なるのでWarnレベルの警告がログにでます。