Ответ 1
Различные блокирующие режимы предназначены для предотвращения изменения объекта и чтения из нескольких источников одновременно, см. запись документации о пессимистическая блокировка для деталей. По моему опыту, они редко нужны, так как уровень изоляции базы данных обычно позаботится о блокировке по мере необходимости:
Не предполагается, что пользователи тратят много времени на блокировку стратегии. Обычно достаточно указать уровень изоляции для JDBC, а затем просто дайте базе данных выполнить всю работу. Однако продвинутые пользователи могут захотеть получить эксклюзивные пессимистические блокировки или повторно получить блокировки в начале новой транзакции.
Что касается "повторного связывания временного экземпляра с сеансом" (я на самом деле думаю, что это подразумеваемый отдельный экземпляр?), рассмотрим следующее изображение (Жизненный цикл сущности гибернации):
Это описание из Документация сообщества Hibernate:
Hibernate определяет и поддерживает следующие состояния объектов:
- Transient - объект является временным, если он только что был создан используя новый оператор, и он не связан с Hibernate Сессия. Он не имеет постоянного представления в базе данных, и нет значение идентификатора было присвоено. Временные экземпляры будут уничтожается сборщиком мусора, если приложение не содержит ссылка больше. Используйте сеанс Hibernate для создания объекта persistent (и пусть Hibernate позаботится о операторах SQL, которые необходимо выполнить для этого перехода).
- Постоянный - постоянный экземпляр имеет представление в базе данных и значение идентификатора. Это может быть просто сохранено или загружено, однако по определению в рамках Сессии. Hibernate обнаружит любые изменения, внесенные в объект в постоянном состоянии и синхронизировать состояние с при завершении работы единицы измерения. Разработчики не выполняют операторы UPDATE или инструкции DELETE, когда объект должен быть преходящим.
- Отдельно - отдельный экземпляр - это объект, который была постоянной, но ее сессия была закрыта. Ссылка на объект все еще действителен, конечно, и отсоединенный экземпляр может даже в этом состоянии. Отдельный экземпляр может быть подключен повторно к новому сеансу в более поздний момент времени, делая это (и все изменения). Эта функция позволяет программировать модель для длительных периодов работы, требующих времени мышления пользователя. Мы называть их транзакциями приложений, т.е. единицей работы из точки зрения пользователя.