TL; DR
load () приводит к прокси-объекту, даже если мы используем расширение байт-кода при доступе к полю. Зачем? В чем выгода? Можем ли мы получить load () лень без прокси? Это неожиданно и также приводит к некоторым ошибкам тестирования для нас.
Контекст (пропустить, если в спешке):
Мы обновляем большое унаследованное приложение со старой версии Hibernate до версии 5.4. По многочисленным будущим причинам мы решили использовать доступ к полям (раньше был свойством) и усовершенствовать байт-код времени сборки (все поля являются частными, и все классы сущностей содержатся в одном проекте из многих).
Старые разработчики приложений изо всех сил старались сделать некоторые вещи ленивыми (по хорошим или плохим причинам), но им это не удалось, так как они пропустили довольно много вещей, включая объявление многих свойств как нетерпеливо загруженных в исходных файлах hbm.xml ( мы перемещаем это в аннотации, все ленивые и будем использовать графы сущностей, чтобы указать, что загружать с нетерпением для каждого варианта использования.
Мы дошли до того, что только несколько десятков тысяч тестов провалились с обновленным кодом. Некоторые из них терпят неудачу, потому что наши ограничения дублирования имени (свойства) сущности нарушаются (что очевидно для клиента API, а не для БД), и мы отслеживаем одну вещь - это использование метода load () вместо get () для получения некоторого лиц.
Теперь я не ищу помощи в нахождении здесь фактического дефекта, но устраняю мою путаницу и (несколько) удивление, что load () возвращает прокси-объект, даже если основной класс был «расширен байт-кодом» во время сборки. Я думал, что это больше не нужно (с улучшением байт-кода), и они даже load () вернут экземпляр, если тот же / основной класс, только, возможно, «менее инициализированный».
В любом случае, если я изменю load () на get (), тесты пройдут, и я подумываю просто заменить их на get (), но меня беспокоит другие преимущества, которые я могу упустить, помимо возможного небольшого выбора SQL ( так как все свойства отображаются как последние). Может кто-нибудь помочь мне понять причины и преимущества load () в случае улучшения байт-кода?