Я хочу обновить сущность в базе данных всякий раз, когда объект в моем приложении содержит данные, которые отличаются от сущности БД.Как эффективно обновить сущность в БД?
Мой метод обновления выглядит следующим образом:
@Transactional
public void updateEntity(String a, String b, boolean c, Date d) { //some more params
MyEntity entity = dao.findEntityBy(a, b, c); //might be some more params
//nullcheck
if (!entity.getA().equals(a)) {
entity.setA(a);
}
if (!entity.getB().equals(b)) {
entity.setB(b);
}
//repeat per property... a-n
dao.save(entity);
}
Вопрос: Должен ли я проверять каждый признак объекта, если оно изменилось, а затем использовать только сеттер? Или я просто пропущу чеки и просто переопределяю объект?
MyEntity entity = dao.findEntityBy(a, b, c);
entity.setA(a);
entity.setB(b);
//...
dao.save(entity);
Что такое perfered way? Каковы преимущества (преимущества) любого решения?
У меня также есть установить 'selectBeforeUpdate = true'? Или это вызовет дополнительный выбор и не понадобится, потому что я уже выбрал объект в '@ Transactional'? – membersound
И вы считаете, что преимущество '@ DynamicUpdate' настолько велико, что тот факт, что hibernate должен регенерировать каждый SQL-запрос динамически, можно пренебречь? Мы говорим об объектных записях с длиной строки около 200 символов, где часто, например, нужно обновлять только один ряд строк (например, наличие запаса). – membersound
О selectBeforeUpdate = true, я не думаю, что вы должны его использовать, но было бы хорошо видеть, что происходит практически, если вы его укажете. О динамическом обновлении номера столбцов не имеют значения столбца. –