1

我很难让 eclipselink.join-fetch 提示在 glassfish 中工作。

我有一个包含 Task 对象集合的 Client 对象,并且 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)

显然没有做第三层的join fetch。

有没有其他人有这个问题......或者只是我:-(

任何帮助或提示(没有双关语)将不胜感激。

4

1 回答 1

0

好的,经过 8 个小时的挫折,我已经深究了。

Glassfish V2 不使用 EclipseLink 作为其持久性提供程序,它使用 Toplink Essentitals。不幸的是,Toplink Essentials 没有提供加入获取提示(我对以下链接感到非常困惑,这让我认为它提供了:https ://glassfish.dev.java.net/issues/show_bug.cgi?id=1200虽然这显然是一个功能请求而不是一个功能)。

所以看起来我试图做的事情是不可能的,如果我想在 glassfish 中进行多级急切获取,我将不得不获取 EntityManagers 委托并直接使用 toplink 要领表达式。

于 2009-02-26T21:51:39.060 回答