Есть ли какие-либо преимущества (Hibernate) load() по сравнению с get() с доступом к полям и улучшением байт-кода?

TL;DR load() приводит к созданию прокси-объекта, даже если мы используем расширение байт-кода при доступе к полю. Почему? В чем выгода? Можем ли мы получить load () лень без прокси? Это неожиданно и также приводит к некоторым ошибкам тестирования для нас.

Контекст (пропустить, если в спешке):

Мы обновляем большое унаследованное приложение со старой версии Hibernate до версии 5.4. По многочисленным будущим причинам мы решили использовать доступ к полям (раньше был свойством) и усовершенствовать байт-код времени сборки (все поля являются частными, и все классы сущностей содержатся в одном проекте из многих).

Старые разработчики приложений изо всех сил пытались сделать некоторые вещи ленивыми (по хорошим или плохим причинам), но им это не удалось, так как они пропустили довольно много вещей, включая объявление многих свойств как загруженных в исходных файлах hbm.xml (мы переходим что для аннотаций, все ленивые и будут использовать графы объектов, чтобы указать, что загружать с нетерпением в каждом случае использования).

Мы дошли до того, что только несколько десятков тысяч тестов провалились с обновленным кодом. Некоторые из них терпят неудачу, потому что наши ограничения дублирования имени (свойства) сущности нарушаются (что очевидно для клиента API, а не для БД), и мы отслеживаем одну вещь - это использование метода load () вместо get () для получения некоторого юридические лица.

Теперь я не ищу помощи в нахождении фактического дефекта здесь, но устраняю мою путаницу и (несколько) удивление, что load () возвращает прокси-объект, даже если основной класс был "расширен байт-кодом" во время сборки. Я думал, что это больше не нужно (с улучшением байт-кода), и они даже load () вернут экземпляр, если тот же / основной класс, только, возможно, "менее инициализированный".

В любом случае, если я изменю load () на get (), тесты пройдут, и я подумываю просто заменить их на get (), но меня беспокоит другие преимущества, которые я могу упустить, кроме возможного небольшого выбора SQL (как и всех свойств отображаются как последние). Может кто-нибудь помочь мне понять причины и преимущества load () в случае улучшения байт-кода?

0 ответов

Другие вопросы по тегам