Как Spring Boot обрабатывает Hibernate Session? - PullRequest
0 голосов
/ 14 мая 2019

Я вижу, что с помощью Spring Boot вам не нужно открывать и закрывать сеанс гибернации.

Но для целей понимания, как он работает внутри, на каком уровне он открывает сеанс гибернации и когда он закрывается.

Я создал один POC. У меня есть одно загрузочное приложение Spring, у него есть два Entity One - Customer, а другое - Address, и между Customer и Address.

существует отношение один ко многим.

И у меня есть один два Apis, один добавляет запись, а другой загружает все записи. Эти AP находятся там в CustomerEndpoint, и они отмечены

@RestController
@RequestMapping(value="/customer").

А также создал CustomerRepository, который расширяет CrudRepository для сохранения и извлечения записей Customer.

Так, согласно моему пониманию, при извлечении Клиента с использованием CustomerRepository внутри CustomerEndpoint класс должен выдавать ошибку LazyInitialization, когда мы скажем customer.getAddress (так как его тип выборки - LAZY). Но он не выдает никакой ошибки, он работает правильно.

Я думал, что сеанса гибернации не будет в классе CustomerEndpoint.

Может кто-нибудь помочь мне, как этот сеанс Hibernate поддерживается загрузкой Spring?

Так как все думают, что это дубликат другого вопроса, но мой вопрос не является вершиной их объяснения, так как в соответствии с ними сессия действительна до репозитория, поэтому в соответствии с этим я должен получить исключение LazyInitialization при произнесении customer.getAddress. внутри CustomerEndpoint, поскольку он не является репозиторием, но я не получаю никаких исключений

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Прежде всего, не стоит использовать Repository layer в вашем Presentation layer.

OSIV (Open Session in View) по умолчанию включен в Spring Boot, и OSIV действительно плохая идея с точки зрения производительности и масштабируемости.

Из-за этого вы не получаете исключение и не можете работать на уровне презентации. Проверьте, поместив следующие элементы в файл application.properties

spring.jpa.open-in-view=false

Для более подробной информации вы можете обратиться OSIV AntiPattern

0 голосов
/ 14 мая 2019

Я думаю, это все еще работает, если ваш customer.getAddress находится внутри транзакции

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