我很难让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)
显然没有进行连接获取的第三层。
有没有其他人有这个问题......或者只是我: - (
非常感谢任何帮助或提示(没有双关语)。
答案 0 :(得分:0)
Glassfish V2不使用EclipseLink作为持久性提供程序,它使用Toplink Essentitals。不幸的是,Toplink essentials没有提供加入提取提示(我对以下链接感到非常困惑,这让我觉得它做了:https://glassfish.dev.java.net/issues/show_bug.cgi?id=1200虽然这显然是一个功能请求而不是一个功能。)
所以看起来我正在尝试做的事情是不可能的,如果我想在glassfish中进行多级渴望获取,我将不得不让EntityManagers代理并直接使用toplink essentials Expressions。