0

hereのよう に、エンティティ クラスが一致しない場合に発生する例外をキャッチして、ユーザーのデータベースを更新したいと考えています。すべての db-interface メソッドに catch ステートメントを追加できることは理解していますが、それはエラーが発生しやすい*です。他の「ポーリング方法」も可能ですが、例外をキャッチすることで必要な割り込み駆動ではありません。

私が探しているのは、ユーザーに配信される前に例外をキャッチすることだと思います (おそらくアプリケーションをクラッシュさせるため)。そこにキャッチブロックを置きます。NB以外のアプリでは main() に入れていたでしょう。

  • 私の理解では、例外はエンティティ ベースでスローされます (つまり、変更されていない 1 つのエンティティのみを含むメソッドは、他のエンティティが変更されても例外をスローしません)。
4

1 に答える 1

0

私は同様の問題を抱えていましたが、私のものは解決するのが少し難しいと思います。サーバー側でJPAを使用していますが、サーバーは実際にはWebサービスプロバイダーです。

永続性はコンテナーによって管理され、私のアプリの設定によると、「作成」戦略を使用します。もちろん、エンティティを変更してアプリケーションを再デプロイするたびに、多くの例外がスローされます。

最終的に決定したのは、既存のデータベースを別のプロセスで作成/移行することです。これは、エンティティに関連付けられたメタデータを読み取り、それを現在のデータベースと比較することです。

その後、db スキーマが異なる場合に備えて、情報を失うことなく新しいスキーマに適合するように移行スクリプトを作成します (移行スクリプトの生成の複雑さは、データ型の変更や属性の削除などのケースをどのように処理するかによって異なります)。最後のステップは、アプリを再デプロイすることです (あなたの場合は開始します)。

例外がスローされるのを待たずに、アプリケーションを実行する前に変更を推測しようとする積極的なアプローチをお勧めします。

于 2010-08-10T22:32:37.580 に答える