[Seasar-user:18808] Re: 【Doma】1対1/1対n の実装方法
Toshihiro Nakamura
[E-MAIL ADDRESS DELETED]
2009年 10月 29日 (木) 12:38:33 JST
中村(taedium)です。
> http://doma.sandbox.seasar.org/faq.html#feature-11
> 1対1/1対n がサポートされていないようですがどのような理由からでしょうか?
SQLの結果セットはフラットにひとつのクラスにマッピング
したほうがわかりやすいと思っているからです。
> Delegateを使用する手順を考えましたが
> 他に何かいい方法があればお教え下さい。
複数回にわけて取得してもいいなら、
Delegateの代わりにDaoの呼び出し元(Serviceクラスみたいな)で
EmployeeDaoやDepartmentDaoにアクセスしてもいいと思います。
JOINを使用して1度で取得すべきなら
EmpDeptDtoみたいなエンティティを別途つくるのが
いいと思います。
EmpDeptDtoにはJOINで取得したいカラムに対応する
プロパティをもたせます。
もちろん、EmployeeとDepartmentのn対1といった
関連の多重度をあらわすことはできないのですが。
> 【その他】
> プラグイン
> @Delegate先のメソッドにジャンプする機能や、クラスやメソッドがなければ自動作成する
> 機能があれば便利かと思いました。
@Delegate先のメソッドにジャンプする機能ですが、
あってもいいかもしれないですね。
現状の機能で簡単に委譲先に移動するには、Ctrl + tなど
で実装メソッドを開いて、そこから委譲先のメソッドを
呼び出しているところを探してジャンプするのが確実です。
クラスやメソッドがなければ自動作成する機能ですが、
SQLファイルからはメソッドの名前は決められても
戻り値の型、パラメータの型、アノテーションの種類等が決められないため
中途半端にメソッドを生成してもあまり便利ではないのかなぁ
と思っています。
作るとしたらアノテーションは@Select決めうち、
戻り値はvoid、パラメータはなしみたいになりますね。
たとえば、selectById.sqlから作るとこんなかんじ。
@Select
void selectById();
--
Toshihiro Nakamura
Seasar-user メーリングリストの案内