эффективно обновлять отношения между спящими объектами - PullRequest
0 голосов
/ 07 июля 2011

У меня есть отношения m2m между двумя спящими объектами, назовем их Movies и Actors, которые я настроил с помощью двунаправленных ссылок. Очевидно, это смоделировано как таблица фильмов, таблица актеров и таблица соединения внешних ключей между двумя в БД.

Интерфейс позволяет обновлять отношения между актерами и фильмами. Внутренне пользовательский интерфейс отслеживает ваши обновления на экране, используя идентификаторы фильмов и задействованных актеров, а затем отправляет идентификатор фильма со списком идентификаторов актеров на контроллер, когда вы нажимаете «сохранить».

Теперь мой вопрос: предположим, я обновляю фильм, добавив к нему четырех актеров в БД. У меня есть список идентификаторов актеров, которые нужно добавить, но у меня нет реальных объектов актеров, потому что я получил только их идентификаторы из пользовательского интерфейса.

Чтобы сделать это обновление, мне нужно заполнить четыре полноценных объекта Actor, просто чтобы добавить их в мой объект Movie, чтобы я мог сохранить его обратно в БД? Другими словами, мне нужно сначала выбрать из моей базы данных только для того, чтобы затем сделать обновление? Этот дополнительный вызов select кажется неэффективным, поскольку все, что действительно будет обновлено, - это добавить несколько строк в таблицу соединений, и у меня уже есть вся информация, необходимая для этого.

Предоставляет ли hibernate удобный способ непосредственного добавления ключей к самой таблице объединения (без написания нестандартного необработанного SQL-запроса)?

1 Ответ

0 голосов
/ 07 июля 2011

Session.load делает то, что вы хотите. Он возвращает прокси Actor, содержащий только идентификатор актера, и предполагает, что вы знаете, что актер существует в базе данных. Если этого не произойдет, ваша транзакция, конечно, будет откатана после обновления из-за нарушенного ограничения внешнего ключа. Если субъект уже присутствует в сеансе, он возвращается. Если транзакции, наконец, необходимо вызвать метод для одного из участников, не нужно проверять: это прокси-сервер, и состояние субъекта будет загружено при необходимости.

Эквивалентный метод с JPA EntityManager: getReference .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...