Как использовать ленивую загрузку свойств с Glassfish + Toplink Essentials

У меня есть запрос:

select p from Product p

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

я добавил @Basic(fetch=FetchType.LAZY) в getMassiveDescription() но это не имеет значения (сгенерированный sql по-прежнему включает в себя все столбцы).

Я использую Glassfish практически из коробки, и он использует основы toplink. Я подумал, что мне нужно что-то сделать, чтобы настроить агент, поэтому я попытался добавить -javaagent:/path/to/toplink-essentials-agent.jar в настройках JVM через веб-интерфейс glassfish. Тогда я получаю исключение:

java.lang.NoClassDefFoundError: javax/transaction/Synchronization
        at ...

Так что я думаю, мне нужно добавить jta.jar в поле суффикса classpath в веб-интерфейсе Glassfish. Это дает мне другое исключение:

java.lang.NoClassDefFoundError: oracle/toplink/essentials/transaction/JTASynchronizationListener
        at oracle.toplink.essentials.transaction.JTATransactionController.<init>...

Так что теперь я гоняю банки. я добавить toplink-essentials.jar к пути к классу таким же образом, но я все еще получаю то же исключение.

У меня есть несколько вопросов:

  • Ожидается, что Glassfish будет поддерживать улучшение байт-кода для загрузки ленивых свойств из коробки?
  • Если нет, то мне не хватает правильного способа его настройки?
  • Я читал, что "рекомендуемый" способ добиться этого - использовать проект для выбора только части объекта в запросе. Мне это нравится больше, но я не могу найти документацию о том, как это сделать. Перестановка select p за select p.id, p.name, ... дает мне странные ошибки - но я все равно только догадывался о синтаксисе.

1 ответ

Решение

Оказывается, основы toplink не поддерживают это. Eclipselink делает, так что, похоже, я перемещаю ORM.

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