2013-11-19 1 views
0

Какой подход более предпочтителен при обновлении объекта в спящем режиме? (новые значения взяты из пользовательского интерфейса)Как правило, для обновления объектов в Hibernate/JPA?

1) Восстановить объект по ID (Session#get()), обновить его с новыми значениями и вызвать Session#update().

2) Создайте новый объект, используя ключевое слово new, заполните его новыми значениями, вставьте идентификатор (все значения, включая ID, полученные от пользовательского интерфейса), и позвоните по номеру Session#update().

ответ

1

Получите сущности из базы данных, используя session.get или запросы, измените ее, завершите сеанс.

Hibernate реализует очень полезный механизм автоматической очистки, который обнаруживает изменения в сеансе и автоматически синхронизирует их с базой данных.

+0

хорошо, спасибо. Но что, если мне также нужно обновить список дочерних объектов (один-ко-многим)? Должен ли я получить весь граф объектов? Что делать, если мой объектный граф действительно сложный (несколько дочерних списков). – MyTitle

+0

Хороший вопрос. Это один из ключевых объектно-реляционных пробелов, охватываемых спящим режимом. Можно получить требуемый объект из сети объектов и обновить базу данных (если я не ошибаюсь). – BDR

+0

При изменении существующих элементов в списке изменения распознаются спящим режимом. Добавление и удаление элементов. Если дети отображаются как составные элементы, у вас нет ничего особенного. Если дети являются объектами, вы можете вставлять новые элементы, используя cascade = all, и удалять их явно или использовать cascade = all-delete-orphans. Когда вы добавляете или удаляете элементы, Hibernate не нужно загружать весь список ... Какие-то более конкретные вопросы? –