2009-02-26 6 views
1

Ich habe echte Schwierigkeiten, den eclipselink.join-fetch-Hinweis zu bekommen, um in Glassfish zu arbeiten.Glassfish Eclipselink Join-Fetch-Hinweis funktioniert nicht

Ich habe ein Clientobjekt, das eine Auflistung von Task-Objekten enthält, und das Task-Objekt verfügt über eine Auflistung von WorkPeriod-Objekten.

Mein Code sieht wie folgt aus:

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(); 

Aber egal, was ich tun, wenn ich den TOPLINK Debug-Level gesetzt es zeigt immer fein, dass die SQL, die tatsächlich ausgeführt werden soll:

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) 

Die dritte Stufe des Join-Abrufs wird eindeutig nicht ausgeführt.

Hat noch jemand Probleme mit diesem ... oder ist es nur ich :-(

Jede Hilfe oder Hinweise (kein Wortspiel beabsichtigt) wäre sehr willkommen.

Antwort

0

OK, nach 8 Stunden Frustration, die ich auf dem Grund davon habe.

Glassfish V2 verwendet nicht EclipseLink als Persistenz-Provider, es verwendet Toplink Essentials. Leider bietet Toplink Essentials keinen Join-Fetch-Hinweis (ich war sehr verwirrt von der folgende Link, der mich denken ließ, dass es getan hat: https://glassfish.dev.java.net/issues/show_bug.cgi?id=1200 obwohl dies offensichtlich eine Feature - Anfrage ist, KEINE Funktion.)

So scheint es, dass was ich versuche zu tun ist nicht möglich, und wenn ich mehrere Ebenen eifrig in glassfish holen möchte, werde ich den EntityManagers-Delegierten bekommen und die toplink essentials-Ausdrücke direkt verwenden müssen .