EJB 2.x BMP エンティティ Bean と Hibernate 3.x の混合
質問
EJB 2.x エンティティ Bean (BMP) を使用する大規模なアプリケーションがあります。これは恐ろしい永続化戦略であることがよく知られています (必要に応じて詳しく説明します)。
このアプリケーションの移行を開始して、より表現力が高く、透過的で、非侵襲的な永続化戦略を使用したいと考えています。私の会社でのこれまでの経験を考慮すると、Hibernate 3.x が当然の選択です。
アプリケーション内の 100 以上のテーブルでエンティティ Bean が使用されているため、Hibernate への移行には時間がかかります。そこで私は、2 つの永続化戦略を並行して、できれば同時に同じテーブル上で実行する段階的なアプローチを検討しています。
私の質問は、これら 2 つの永続化戦略を組み合わせる場合の落とし穴 (ある場合) は何でしょうか?彼らはお互いの邪魔になるでしょうか?
解決
jodonnel が述べたように、Hibernate で第 2 レベルのキャッシュを使用し、テーブルが Hibernate の外部で変更された場合、Hibernate はそのキャッシュ エントリが古いことを知る方法がないため、キャッシュに注意を払う必要があります。
トランザクションの場合、両方ともコンテナーによって提供される JTA を使用する必要があるため、安全である必要があります。
他のヒント
本当に注意しなければならないのは、Hibernate セッションの操作だと思います。Hibernate は内容をキャッシュするため、それが邪魔になる可能性があります。
率直に言って、Hibernate を採用する場合は、Entity Bean を完全に削除することをお勧めします。Hibernate 作業をセッション Bean 内で実行し、セッション Bean にトランザクションを管理させます。
または、Java Persistence API に標準化された Hibernate である EJB 3 を代わりに使用します。