セッターで検証を行うオブジェクトがあります。例えば:
class Employee {
private String name;
public void setName(String theName) {
if (theName.contains("*")) {
throw new IllegalArgumentException("You can't have an asterisk in a name!");
}
name = theName
}
}
Hibernate クエリが無効なデータ ( Employee
「John Smith*」という名前のオブジェクトなど) を使用してオブジェクトをインスタンス化しようとするIllegalArgumentException
と、クエリ全体が失敗します。この特定のアプリケーション (キャッシュをロードする) の理想的な動作は、Hibernate が例外をトラップし、レコードを拒否し、初期化中にいかなる種類の例外もスローしなかったオブジェクトのリストを返すことです。
私はいくつかの代替ソリューションを認識しています:
- 直接フィールド アクセスを使用して Hibernate をセットアップし、セッターをバイパスする
- セッターで例外をスローする代わりに、オブジェクトを無効としてマークし、から返されるリストからそれらを除外する
org.hibernate.Query.list()
か、返された後の検証を保存しlist()
ます。 - データベースデータのクリーン度を保証します (これが私の力の範囲内であれば!)
私の好みは、オブジェクトが引き続きセッターから例外をスローできるようにし、Hibernate の結果に対して後処理を行うことを避け、Hibernate でインスタンス化されたオブジェクトに新しい検証ライフサイクル ステップを導入することを避けることです。これを行う方法はありますか?