Как вы проверяете список гибернации, чтобы узнать, был ли он инициализирован?

#hibernate #lazy-initialization

#впасть в спящий режим #ленивая инициализация

Вопрос:

Допустим, в режиме гибернации у вас есть класс с именем department, и он содержит список сотрудников. Есть ли способ проверить список сотрудников, чтобы определить, был ли он уже введен в действие? Кажется, независимо от того, к какому свойству вы обращаетесь, оно выдает вам исключение ленивого инициализатора. Есть ли какой-либо способ проверить его инициализацию без получения исключения?

Я хотел бы посмотреть, был ли он инициализирован, и если нет, просто выполните запрос данных и заполните его.

Ответ №1:

Есть ли способ проверить список сотрудников, чтобы определить, был ли он уже инициализирован?

Вы могли бы использовать гибернацию.IsInitialized(), чтобы проверить, инициализирован ли объект гибернации или нет.

Я хотел бы посмотреть, был ли он инициализирован, и если нет, просто выполните запрос для данных и заполните его.

Вы можете использовать Hibernate.initialize() для принудительной инициализации объекта гибернации. Он будет запрашивать и заполнять данные для вас, если они еще не инициализированы.

Ответ №2:

вам не нужно выполнять запрос вручную — весь смысл отложенной инициализации заключается в том, что ORM обработает его за вас, когда придет время для доступа к данным.

Если вы получаете исключение отложенной инициализации, это означает, что сеанс гибернации не открыт, поэтому он не может извлекать дочерние элементы.

Используйте open-session-in-view (который сохраняет сеанс открытым в течение срока действия запроса в веб-приложении) или инициализируйте коллекцию заранее при загрузке родительского элемента (что приводит к накладным расходам на загрузку данных, которые могут не понадобиться, что нормально, если его всегдатребуется).

Комментарии:

1. Я понимаю значение исключения отложенной инициализации. ORM неправильно обрабатывает данные, потому что он не уведомляет вас о своем состоянии. То, что он «должен» делать, в значительной степени не имеет значения, потому что это автоматическое волшебство не работает. Итак, мне было интересно, сделал ли это способ проверки его состояния доступным для вас.

2. Это просто какой-то ботаник. Меня просто раздражал спящий режим. Не беспокойтесь об этом.