Intellij отладчик перешагивает через спящие объекты значения пустые - PullRequest
0 голосов
/ 08 декабря 2018

Когда я переступаю через сложные объекты с Intellij, объекты в окне отладки кажутся пустыми.Помечено как $$_hibernate_interceptor

Итак, допустим, у меня есть простой код, который выглядит следующим образом:

Subscription subscription  = subscriptionRepository.getOne(1l);
log.info("add breakpoint debug code stopped here")

Я хотел бы посмотреть, какие значения были возвращены из subscriptionRepository и назначены дляобъект подписки в окне Debug:.

См. снимок экрана, на котором показано, как это выглядит на моем компьютере.

enter image description here

Как вы можете видеть, большинство значений переменных кажутся пустыми, однако, если я сделаю toString () для объекта подписки, он выведет значения, помеченные как нулевые, в окне перехватчика.Так что они на самом деле не пусты.

Итак, пара вопросов здесь

  • Что такое $$_hibernate_interceptor

Дальнейшие выводы

Перехватчиквозвращается только когда я использую значение по умолчанию repository.getOne.Если я использую findBy или мой собственный findByField, он не вызывает перехватчик и отображает значения в окне отладки.

Что здесь происходит, почему getOne отображает перехватчик, а другие нет?

1 Ответ

0 голосов
/ 17 декабря 2018

Как видите, тип вашей подписки - Subscription$HibernateProxy$....Это связано с тем, что Hibernate загружает свойства из базы данных по мере их использования.

До первого доступа к ним, скажем, в toString(), они будут нулевыми.Вы можете легко обойти это, добавив переменные часы (маленький значок + ) в "subscription.toString ()".

Разница между findById и getOne заключается в том, чтоПервый возвращает ленивый прокси, а второй использует загруженный объект.Некоторую информацию о том, почему можно найти здесь .

...