[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 メーリングリストの案内