В "добрые старые дни JDBC" я написал много кода SQL, в котором были очень целевые обновления только "атрибутов/членов", которые были фактически изменены:
Например, рассмотрим объект со следующими членами:
public String name;
public String address;
public Date date;
Если в каком-то бизнес-методе был изменен только date
, я бы выпустил SQL UPDATE
для члена date
.
Кажется, однако (что мое "впечатление" от Hibernate), что при работе со стандартным отображением Hibernate (отображение полного класса) даже обновления только одного члена приводят к полному обновлению объекта в выраженных операторах SQL по Hibernate.
Мои вопросы:
-
Является ли это наблюдение правильным, что Hibernate не проверяет разумно (в полностью сопоставленном классе), какие члены (члены), где были изменены, а затем только выпускают обновления для определенных измененных членов, но скорее всегда будут обновлять (в сгенерированное выражение об обновлении SQL), все отображаемые элементы (класса), даже если они не были изменены (в случае, если объект загрязнен из-за загрязнения одного члена...)
-
Что я могу сделать, чтобы Hibernate обновил только те члены, которые были изменены? Я ищу решение для того, чтобы Hibernate обновил только тот элемент, который фактически изменился.
(Я знаю, что Hibernate выполняет некоторую работу по проверке грязной проверки, но насколько я знаю, эта грязная проверка имеет значение только для определения того, загрязнен ли объект целиком, а не какой-то один член грязный.)