Как использовать ленивую загрузку свойств с Glassfish + Toplink Essentials - PullRequest
0 голосов
/ 13 октября 2009

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

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 Ответ

0 голосов
/ 19 октября 2009

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

...