クラスの 90% が非常に単純で、DB で 1 対 1 で簡単にマッピングできるドメインがあります。Hibernate と spring-data-jpa を組み合わせることで、これらのクラスの多くの雑用が削減されたことを非常に嬉しく思います。
ただし、ドメインの残りの部分は難しく、さまざまな理由から、DB テーブルに直接マップしたくありません。
Hibernate によって管理される中間 Bean を導入し、これらの Bean からドメインにマップする実験を行いました。これは、すべての関係が難しい部分から簡単な部分までの場合にうまく機能しました。このアプローチは、Hibernate によって管理される「簡単な」クラスがあり、カスタム Java コードにマップされ、休止状態で直接管理されない「挑戦的な」クラスを参照している場合に失敗します。
これは、Hibernate をカスタマイズし、オンザフライでそのような変換を行うことを可能にするある種の ObjectFactory をプラグインする方法が見つからないことに気付いたときです。
- 編集 -
私の質問は何ですか: JPA を使用しているときに、エンティティに DB の問題がない DDD スタイルのドメイン層を持つ最も簡単な方法は何ですか? DDD では、すべての DB の問題は、通常 DAO と連携するリポジトリによって処理されます。
エンティティに DB の問題がないということは、ドメイン クラスに JPA アノテーションやマッピング構成がないことを意味します。これを行う 1 つの方法は、ドメイン エンティティにマップされた TO を JPA (または他の永続化テクノロジ) で管理することです。ただし、このルートを使用する場合、すべてのエンティティが必要であり、最も単純なもの (アドレスを考えてください) でさえ、マッピング レイヤーを経由します。
些細なエンティティにJPAのような「怠惰な」ものを使用し、それらを「手動で」管理される他のエンティティと混合できるようにしたいと思います。現在、JPA管理エンティティから非JPA管理エンティティへのリンクを可能にする巧妙なソリューションを知りません。いつでも JPA エンティティを取得してから、2 回目の呼び出しで非 JPA エンティティを取得できますが、可能であればこれを避けたいと考えています。