私は最近、中規模のレガシーコードベース(3.xから5.2へ)でHibernate依存関係のバージョン(他のものの中でも)にバンプすることを許可されました。コードそのものは部分的に10年以上経過していますが、まだ日常的に使用されています。レガシーHibernateアプリケーションのアップグレードパスは何ですか?
APIの呼び出しが増えた後でも、現在では非難されていた領域や欠けている領域まで、多くのAPI呼び出しを移植しても(SchemaExportを実行する方法を見つけるのは特に楽しい経験でした)完全な移行として。
多くの場合、エンタープライズシステムは10年から15年程度の期間であり、必要なバグ修正や機能を得るためには、より新しい依存バージョンにジャンプする必要があるため、レガシーユーザーのためのアップグレードパスは何ですか?
次の点は、ややまだ開いている:
JPAのアノテーションに.hbm.xmlマッピング情報を移行する明確なまたは自動的な方法はありません。私は、手動での移行は非常にエラーが発生する可能性が高く、すべての概念が明確で明白な対抗手段を持っているわけではありません。
以前のCriteria APIの使用方法については、多くの非推奨警告(org.hibernate.orm.deprecation)がありますが、明確なアップグレードパスもありません。 1つのアプリケーションのdbアクセスコード全体を、まったく異なる、より冗長なAPIに書き直すことはできません。
org.hibernate.transform.ResultTransformer
のネイティブクエリとインスタンスをたくさん使用しているようですが、org.hibernate.query.Query#setResultTransformer()
はこれを回避する方法が示されていません。
ほとんどの懸念事項は、統合テストの存在によってカバーされています。あなたがレガシーシステムで働いているとすれば、私はそれを持っていません。それがあなたの主な問題です.Hibernateが時間の経過とともに進化したという事実ではありません。同様のアップグレードを行いましたが、サーバ(JBoss 5.1からWildfly 9へ)とJSF(1.2 + JBoss SeamからJSF 2.2 + Primefaces)にアップグレードしました。これは6ヶ月間のコード再設計に苦労しました。それは従来のシステムと同じように、そしてなぜ多くの人がアップグレードしないかを選択する理由です。 – Gimby
アプリケーションで使用しているパターンとテクノロジは何ですか?私はあなたがMVCを使用するアプリケーションを意味する、サービス層のためにあなたはSpring、EJBなどを使用します。 –
5.1にアップグレードし、まだ5.2にアップグレードしないことをお勧めしますか? 5.2は、Hibernate 6に向かって「道路を舗装する」ことについて非常に多くのことを話しています。私たちが知っているいくつかのものを非難します。また、いくつかの変更が余りにも行き過ぎていて、5.2.1に少し戻っています。つまり、https://hibernate.atlassian.net/browse/HHH-10877 – Sanne