FetchMode в Hibernate говорит как мы хотим, чтоб связанные сущности или коллекции были загружены
Скачать 12.87 Kb.
|
HIBERNATE FetchMode в Hibernate говорит как мы хотим, чтоб связанные сущности или коллекции были загружены: — SELECT — используя по дополнительному SQL запросу на коллекцию, — JOIN — в одном запросе с корневой сущностью, используя SQL оператор JOIN, — SUBSELECT— в дополнительном запросе, используя SUBSELECT. Eager Loading — стратегия загрузки, при которой подгрузка связанных сущностей происходит сразу. Для применения необходимо в аннотацию отношения (@OneToOne, @ManyToOne, @OneToMany, @ManyToMany) передать fetch = FetchType.EAGER. Используется по умолчанию для отношений @OneToOne и @ManyToOne. Lazy Loading — стратегия загрузки, при которой подгрузка связанных сущностей откладывается как можно дольше. Чтобы задать такое поведение, нужно в аннотацию отношения (@OneToOne, @ManyToOne, @OneToMany, @ManyToMany) передать fetch = FetchType.LAZY. Используется по умолчанию для отношений @OneToMany, @ManyToMany. До момента загрузки используется proxy-объект, вместо реального. Если обратиться к такому LAZY-полю после закрытия сессии Hibernate, то получим LazyInitializationException. Объект-сущность может находиться в одном из 3-х состояний (статусов): transient object. Объекты в данном статусе — это заполненные экземпляры классов-сущностей. Могут быть сохранены в БД. Не присоединены к сессии. Поле Id не должно быть заполнено, иначе объект имеет статус detached ; persistent object. Объект в данном статусе — так называемая хранимая сущность, которая присоединена к конкретной сессии. Только в этом статусе объект взаимодействует с базой данных. При работе с объектом данного типа в рамках транзакции все изменения объекта записываются в базу; detached object. Объект в данном статусе — это объект, отсоединённый от сессии, может существовать или не существовать в БД. |