Похоже, что это побочный эффект отложенной загрузки, возможно, при реализации с помощью улучшения байт-кода.
Если я правильно вас понимаю, вы используете отладчик для проверки свойств объекта JPA. Для реализации отложенной загрузки и грязной проверки реализации JPA необходимо получить код между кодом, который вы пишете для ваших сущностей, и кодом, использующим эти сущности.
Чтобы проверить эту догадку и уточнить, что именно точно происходит, и когда вам, вероятно, нужно прочитать условия улучшения байт-кода в Hibernate.
Есть два варианта, как это сделать:
Прокси: вы не возвращаете сущности, а прокси, которые ведут себя как сущность (более или менее), но также заботятся о ленивой загрузке. Это может привести к тому, что в некоторых случаях, например, приведение может завершаться сбоем в зависимости от того, как был загружен объект.
Манипулирование байтовым кодом: некоторый дополнительный байтовый код вводится в класс сущности в чтобы позаботиться о ленивой загрузке и тд. AFAIK это обычно происходит, когда класс загружается, т.е. байт-код в файловой системе не изменяется, но JVM фактически выполняет его манипулированную версию. Это означает, что байт-код не совпадает с кодом, видимым в IDE, и IDE не знает об этом, так как он проверяет, что байт-код в файловой системе совпадает с исходным кодом, и выдает предупреждение, если два не совпадают .
Я подозреваю, что когда код компилируется и выполняется через Maven, используется второй вариант, но если он компилируется / запускается средой IDE, используется первый вариант, что приводит к путанице и изменение поведения.
Я предлагаю использовать геттеры и варианты «оценивать выражение» для проверки свойств ваших сущностей.