2014-09-23 4 views
1

В спящем режиме, если динамическое обновление включено, в то время как обновление объекта он генерирует запрос только для измененных столбцовДинамического обновления с композитным ид зимует

Рассмотрят класс с композиционно-ид с использованием компонентами. Composite-id saveOrupdate объект. Если данный ключ не является БД, он добавляет, в противном случае обновляет объект

Теперь, что я хочу, как я могу объединить эти 2 функции? Например, у меня есть класс с 3 атрибутами: возраст, зарплата, адрес и составной ключ и имя.

Для ключа «1-Мохан» У меня уже есть записи для возраста = 22, зарплата = 30000, адрес = XXX. Теперь я хочу только обновить свою зарплату до 40000. Когда я создаю новый экземпляр с ключом «1-mohan» и устанавливаю только зарплату = 4000 и сохраняется. Теперь запись заполняет нулевые значения для возраста и адреса, поскольку динамическое обновление происходит только для объекта, извлеченного из БД.

Есть ли способ сохранить существующие значения без изменений и обновить только данный атрибут без извлечения объекта из базы данных?

ответ

0

Установка dynamic-update на true не устанавливает значения null для других полей, вместо этого он просто обновит поля, которые будут изменены.

Например, в вашем примере запрос генерируется спящий режим будет как:

UPDATE USER_TABLE SET SALARY=? 
    WHERE ID=? AND NAME=? 

Так что не собирается установить null значения для других полей.

Update:

Теперь на основе ваших объяснений в комментариях этот вопрос не имеет никакого отношения к dynamic-update.

Что вам нужно сделать, это сначала использовать Session.get, чтобы получить ваш объект на основе composite-id. Теперь ваш объект будет иметь все поля. Теперь обновите поле salary, а затем вызовите метод saveOrUpdate.

Если dynamic-update - false, то hibernate сгенерирует запрос update, включив все поля.

UPDATE USER_TABLE SET SALARY=?, AGE=?, ADDRESS=? 
    WHERE ID=? AND NAME=? 

Если dynamic-update является true затем спящий режим будет генерировать update запрос, в том числе только salary поле, как указано в моем ответе.

UPDATE USER_TABLE SET SALARY=? 
    WHERE ID=? AND NAME=? 
+0

Да, я это знаю. Но мой вопрос заключается в том, что мы используем динамическое обновление с составным идентификатором. В этом случае мы создаем только новый объект и даем для saveOrupdate –

+0

@MohanRajB, я не понимаю, что вы пытаетесь сказать, если вы создаете новый объект и просто устанавливаете поле 'salery', тогда hibernate будет устанавливать значения« null »для все другие свойства, даже если у вас нет 'dymaic-update', тогда нет проблем? – Chaitanya

+0

да, вы правы. Я создаю новый объект с одним ключом, а в БД существует объект, уже имеющий тот же ключ (составной идентификатор). Теперь, когда он использует составной идентификатор, он вызовет saveorupdate и обновит существующую строку, которая сделает все остальные поля пустыми, кроме поля, которое я обновил. Я хочу, чтобы это поле не изменилось, чтобы сохранить свое первоначальное значение во время этого обновления. –

Смежные вопросы