Скажем, у Foo есть некоторые свойства размера, цвета и выравнивания.
Таким образом, Foo в базе данных обладает этими свойствами (и вы уже определили, что это правильное значение с использованием вашего атрибута уникальности)
id=1, size=12, color=null, alignment="c"
Тогда предположим, что новый объект Foo (newFoo) имеет следующие свойства
id=(none yet), size=14, color="red", alignment=null
Доступны следующие варианты: использовать метод saveOrUpdate () или метод merge (). И то и другое приведет к тому, что новый объект будет сохранен поверх старого объекта, но с сохранением идентификатора старого объекта.
Сохраненный новый объект будет иметь свойства newFoo выше, но с идентификатором, установленным на 1.
Однако, если вы хотите переопределить только определенные свойства Foo, вам, возможно, придется загрузить объект из базы данных и скопировать их вручную. Например, в этом случае выравнивание перезаписывается нулем. Если вы хотите, чтобы выравнивание было перезаписано только в тех случаях, когда новое значение не равно нулю, то я думаю, что вам нужно скопировать значения вручную.