Какой подход более предпочтителен при обновлении объекта в спящем режиме? (новые значения взяты из пользовательского интерфейса)Как правило, для обновления объектов в Hibernate/JPA?
1) Восстановить объект по ID (Session#get()
), обновить его с новыми значениями и вызвать Session#update()
.
2) Создайте новый объект, используя ключевое слово new
, заполните его новыми значениями, вставьте идентификатор (все значения, включая ID, полученные от пользовательского интерфейса), и позвоните по номеру Session#update()
.
хорошо, спасибо. Но что, если мне также нужно обновить список дочерних объектов (один-ко-многим)? Должен ли я получить весь граф объектов? Что делать, если мой объектный граф действительно сложный (несколько дочерних списков). – MyTitle
Хороший вопрос. Это один из ключевых объектно-реляционных пробелов, охватываемых спящим режимом. Можно получить требуемый объект из сети объектов и обновить базу данных (если я не ошибаюсь). – BDR
При изменении существующих элементов в списке изменения распознаются спящим режимом. Добавление и удаление элементов. Если дети отображаются как составные элементы, у вас нет ничего особенного. Если дети являются объектами, вы можете вставлять новые элементы, используя cascade = all, и удалять их явно или использовать cascade = all-delete-orphans. Когда вы добавляете или удаляете элементы, Hibernate не нужно загружать весь список ... Какие-то более конкретные вопросы? –