Это эффективно отключает отложенную загрузку во всех применимых коллекциях, но не только для отображения VO. Если бы у вас была какая-либо внутренняя логика приложения, которая требовала ленивой загрузки этой коллекции, она бы просто стала нулевой. Этот вопрос конкретно об отключении отложенной загрузки для сопоставления VO, а не вообще.

ользую транзакции Spring, поэтому транзакция все еще активна, когда происходит преобразование POJO в DTO.

Я бы хотел, чтобы Dozer не запускал отложенную загрузку, чтобы скрытые sql-запросы никогда не выполнялись: вся выборка должна выполняться явно через HQL (чтобы получить лучший контроль над производительностью).

Это хорошая практика (я не могу найти это где-нибудь задокументировано)?

Как это сделать безопасно?

Я пробовал это до преобразования DTO:

PlatformTransactionManager tm = (PlatformTransactionManager) SingletonFactoryProvider.getSingletonFactory().getSingleton("transactionManager");
tm.commit(tm.getTransaction(new DefaultTransactionDefinition()));

Я не знаю, что происходит с транзакцией, но сеанс Hibernate не закрывается, и ленивая загрузка все еще происходит.

Я попробовал это:

SessionFactory sf = (SessionFactory) SingletonFactoryProvider.getSingletonFactory().getSingleton("sessionFactory");
sf.getCurrentSession().clear();
sf.getCurrentSession().close();

И это предотвращает отложенную загрузку, но является ли хорошей практикой манипулирование сеансом непосредственно на уровне приложений (который в моем проекте называется «фасад»)? Какие негативные побочные эффекты я должен бояться? (Я уже видел, что тесты, включающие преобразования POJO -> DTO, больше нельзя запускать с помощью тестовых классов AbstractTransactionnalDatasource Spring, поскольку эти классы пытаются инициировать откат транзакции, которая больше не связана с активным сеансом).

Я также пытался установить распространение на NOT_SUPPORTED или REQUIRES_NEW, но он повторно использует текущий сеанс Hibernate и не предотвращает отложенную загрузку.

Ответы на вопрос(1)

Ваш ответ на вопрос