Как использовать ленивую загрузку свойств с 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.