妄想JPA実装

  • WARM deploy/COOL deployに対応。WARM deploy時には、EntityManagerのメソッドが実行されたり、QueryにJPQLやNamedQueryが渡されたタイミングで初めて該当するEntityだけを定義する。ただし、特定FWには依存しない。
  • Seasar2のHOT deployに対応。
  • 内部でEntityを作成する処理を委譲できるようにする。prototypeでcomponent定義したSpringやSeasar2にEntity作成処理を委譲できる。EntityにDI×AOPできるようになるが、persistに対応できないという問題が残る(mergeを使えばいいんだけど)
  • SpringのAspectJ機能を前提に、newしたEntityも含めてDI×AOPが効くようにする。
  • DI対象プロパティには@Temporalをつけた上で、@ResourceとかDI用アノテーションを定義する。オートバインディングには対応しない。
  • NativeQueryをもうちょっと使いやすくする。Query#setHint()を使って、戻り値のオブジェクト配列をJavaBeanに自動変換できるようにする。
  • NativeQueryの結果セットがEntityの全プロパティを満たしていなくても、残りのプロパティがLAZY設定されているなら、Entityを戻り値として利用できるようにする。
  • Entity自動登録機能が有効時は、**Orm.xmlも自動登録できるようにする。
  • トランザクション外でのLAZYロード挙動をオプションで変更可能にする。デフォルトはHibernateのように例外を出す。TopLinkのようにDBアクセス可能にする・無視してnullを返す とproperty設定で変更できるようにする。
  • Entityをマッピングしたメタデータを、orm.xmlスキーマから作成したJAXBオブジェクトで保持する。
  • JPA2.0のCriteriaに対応。



あくまで妄想です。
Entityに対するDI×AOPは、そもそもその必要性はあるのかという疑問もありますが・・・ちょっと見方を変えて、「永続化できるJavaオブジェクト」として、もっと汎用的にEntityを使う(ドメインモデルというレベルではなくて)手法が考えられないかな・・・とか妄想しています。例えば、普通のロジッククラスに対しては、組み込み型DBを使って一時的な永続化機能を提供する・・・とか。