У меня есть запрос:
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, ...
вызывает у меня странные ошибки - но я все равно только догадывался о синтаксисе.