2009-02-26 7 views
1

У меня возникли трудности с получением подсказки eclipselink.join-fetch для работы в стеклянной платке.Советник по перекрестному соединению GlassFish Eclipselink не работает

У меня есть объект 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) 

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

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

Любая помощь или советы (не каламбур) была бы оценена.

ответ

0

OK, после 8 часов разочарование у меня есть в нижней части.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^