Что у меня:
У меня есть объект 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 предоставляет более элегантный способ проверить, какие поля были изменены? Как?
P.S.
@victorantunes предоставляет решение, но оно кажется слишком полным для меня. Может быть, некоторые альтернативы?