Glassfish Eclipselink Подсказка при соединении не работает - PullRequest
1 голос
/ 26 февраля 2009

Мне очень трудно заставить подсказку eclipselink.join-fetch работать с Glassfish.

У меня есть объект Client, который содержит коллекцию объектов Task, а объект Task имеет коллекцию объектов WorkPeriod.

Мой код выглядит так:

Query query = entityManager.createQuery("select client from Client client left join fetch client.tasks");   
//Set hint to allow nested fetch joins
query.setHint("eclipselink.join-fetch","client.tasks.workPeriods");
List<Client> clients = query.getResultList();

Но независимо от того, что я делаю, когда устанавливаю уровень отладки TOPLINK, он всегда показывает, что SQL, который на самом деле выполняется:

SELECT t0.ID, t0.NAME, t1.ID, t1.DESCRIPTION FROM CLIENT t0 LEFT OUTER JOIN (CLIENT_TASK t2 JOIN TASK t1 ON (t1.ID = t2.tasks_ID)) ON (t2.Client_ID = t0.ID)

Очевидно, что не выполняется третий уровень выборки соединения.

У кого-нибудь еще были проблемы с этим ... или это только у меня: - (

Любая помощь или подсказки (без каламбура) будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 февраля 2009

Хорошо, после 8 часов разочарования я дошел до сути.

Glassfish V2 не использует EclipseLink в качестве поставщика устойчивости, он использует Toplink Essentitals. К сожалению, основы Toplink не предоставляют подсказку о соединении (я был очень смущен следующей ссылкой, которая заставила меня думать, что это так: https://glassfish.dev.java.net/issues/show_bug.cgi?id=1200, хотя это, очевидно, запрос функции, а не функция).

Таким образом, может показаться, что то, что я пытаюсь сделать, невозможно, и если я хочу сделать многоуровневую активную выборку в glassfish, мне нужно будет получить делегат EntityManagers и напрямую использовать выражения основы toplink.

...