例えば、関連のLoding問題についていえば、
Eager loading も Lazy loading もサポートせず、
次のようなフェッチ結合のみをサポートしています。
join()メソッドのデフォルトはフェッチ結合になります。
jdbcManager.from(Employee.class).join("department")
http://s2container.seasar.org/2.4/ja/s2jdbc_abstract.html#トラブリにくい
O/Rマッピングに対して抵抗がありましたが、
S2JDBCの関連アノテーションは「いいかも!」と思いました。
それは、S2JDBCでは、Eager loading や Lazy loadin は、サポートせず、
フェッチ結合のみサポートしているからです。
つまり、関連アノテーションを定義していても、
「勝手に無駄なSQLを発行しない」ところがポイントだと思います。
関連先のEntityを取得するには、
結合条件(innerJoinまたはleftOuterJoin)を指定します。
あとは、、、、
関連アノテーション付きのEntityを自動生成させたいところです。
DBViewerでは、PKとFKを使ったManyToOneを生成するだけが、精一杯です。
# FKを使ったManyToOneの関連アノテーションの生成に対応しました。
そもそも、関連定義はER図で記述するものであり、
物理設計に落ちてからでは無理があります。
ObjectBrowserERやAmaterasERDから
S2JDBC用のEntityが自動生成できるといいのですが・・・・
5 件のコメント:
S2JDBC エンティティ生成って 1.0.8.v20080717 に含まれていますか? 新たにプロジェクトを起こしていて使わせていただきたいなーと思っています。
あと、@MappedSuperclass とかには対応してたりしますか?
こんばんわ、ZIGENです。
おおお、ぜひ使ってみてください。
あくまでもS2JDBC用なので、DBViewerの拡張Pluginとして作成しているところです。
ベータ版として、近日中に公開してみたいと思います。
今の機能は
Entity作成(FKによるManyToOneのみ対応)
S2AbstractServieを継承したEntityServiceの作成
ができるようになっています。
@MappedSuperClassということは
DBは、PostgreSQLとかでしょうか?
JDBCのMeta情報から継承情報が取れるのであれば、対応は可能かもしれません。
別プラグインいい感じですね! 公開楽しみにしています。
DB は MySQL で、@MappedSuperClass は別プロジェクトで Oracle でも使ってました。
@MappedSuperClass を付けたエンティティの共通親クラスは手で作成しておきたいと思っています。これの利点だと思っているのは id のアノテーション属性をいつでも変更できる、AbstractService の insert や update で共通項目となる insert_date や update_date を設定しやすいなどがあります。
可能でしたら、DB の共通カラム、例えば id、version、delete_flag、insert_date、update_date などを最初に除外項目として設定できればと思っています。
生成したエンティティを継承してカスタマイズするジェネレーションギャップパターンはクラス増大やフィールドの隠蔽間違いなどが発生しやすくなるため、よくないと思っています。
フィールドに付加するアノテーションは Oracle や MySQL のカラム・コメントに @なんたら、と入っていれば、それをそのまま生成するソースに貼り付けてしまうのは、いかがでしょうか? これであれば、テーブルが変わってもいつでも再生成できるので、便利なのかなーと思っています。
前のプロジェクトでは Excel マクロで生成していましたが、アノテーションの間違いが結構あったので再生成は頻繁にありました。
エンティティの共通親クラスは、全体のEntityで
1つ作成するイメージでしょうか?
それとも、Javaクラスを作成する際のウィザードのように
Entityを自動生成する際に、親クラスを選択できるように
した方がよいのでしょうか?
# 全てのテーブルに、INESRT_DATEやUPDATE_DATEなどがあるわけでは無いと思いますので・・
実際のテーブル(DDL文)を例に
どういう親Entity、子Entityが作成されるといいのか
できれば、メールで送っていただけると、うれしいです。
# zigen_mm@yahoo.co.jp
また、コメントのアノテーションを使って、自動生成をすることは可能ですが、
@ManyToOne
@OneToManey
@OneToOne
のどこまで対応した方がいいですか?
また、コメントにはどこまで書くことを想定してますか?
こちらも、よければサンプルをいただければ、対応できるように
実装してみたいと思います!!
コメントを投稿