私が持っているもの:
コレクションを含む多くの非一時的なフィールドを含む Hibernate エンティティがあります。ユーザーは、各フィールドを個別に更新することも、フィールドのグループを一度に更新することもできます。
何という挑戦:
ハンドラーで、エンティティのどのフィールドが変更されたかを確認する必要があります。
public void handle(Entity newVersion) {
Session session = sessionFactory.openSession();
Entity oldVersion = (Entity) session.get(Entity.class, entity.getId());
List changedFields = compareChanges(oldVersion, newVersion); //HOW TO CHECK WHICH FIELDS ARE CHANGED?
}
セキュリティと通知の理由でそれを行いたいです。意味:
- すべてのユーザーがすべてのフィールドを変更できるわけではありません
- 一部のフィールドの変更について、特定の方法で特定のユーザーに通知する必要があります。
なんて問題:
私は非常に醜いコードを取得します。実際には、すべてのフィールド/コレクションを繰り返し処理し、equals
メソッドを呼び出します。
質問:
どのフィールドが変更されたかを確認するためのよりエレガントな方法を Hibernate が提供する可能性がありますか? どのように?
PS
@victorantunes は解決策を提供しますが、私には包括的すぎるようです。いくつかの代替案がありますか?