Сделайте объекты инициализации Lazy нулевыми, в то время как объект с прокси Hibernate в jpa - PullRequest
0 голосов
/ 26 сентября 2019

Например, у меня есть три класса следующим образом

User{
   Integer id;
   ...
}

Book{
  Integer id;
  ....

  @ManyToOne(fetch=FetchType.lazy)
  User insertedBy;
}

Author{
   Integer id;
   List<Book> books;
}

Теперь мне нужно показать список авторов с их написанными книгами на той же странице, поэтому я выбираю авторов с помощью метода findAll () с использованием репозитория jpa .здесь я не нуждаюсь в вставке по столбцу книг, поэтому я без ума от них lazy load .

Когда я пытался преобразовать эти списки авторов в объект json с помощью Gson.это дает исключение отложенной загрузки в классе User (прокси Hibernate ... сеанс не найден .....)

Я следовал многим из способов, указанных в этой сети, таких как TypeAdapters .мне ничего не помогаетЯ просто хотел сделать вставленный столбец Книги как ноль в ленивой загрузке.

сейчас я использую Dto классы, чтобы избежать insertBy / make insertBy как ноль.

Есть ли какой-либо другой простой способ без преобразования его в Dto.

Я сталкивался с этой проблемой много раз.все это время я перешёл в Dto.

Если кто-нибудь знает ответ, пожалуйста, помогите мне решить.

1 Ответ

1 голос
/ 26 сентября 2019

«lazy-load» в Hibernate означает, что дочерние элементы фактически не загружаются при загрузке родительского элемента, обычно, когда вы пытаетесь получить доступ к дочернему элементу во время итерации, он загружается.В вашем случае вы получаете это исключение для отложенной загрузки, потому что к тому времени, когда gson попытается получить доступ к дочернему элементу, чтобы сопоставить его с объектом JSON, сессия уже закрыта.

Возможно, вы можете попросить GSON игнорировать это поле, покаотображение в JSON с использованием класса ExclusionStrategy, предоставленного Gson.

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