Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa EclipseLink JPQL(Glassfish v3):连接获取语法问题?_Jpa_Eclipselink_Jpql - Fatal编程技术网

Jpa EclipseLink JPQL(Glassfish v3):连接获取语法问题?

Jpa EclipseLink JPQL(Glassfish v3):连接获取语法问题?,jpa,eclipselink,jpql,Jpa,Eclipselink,Jpql,使用Hibernate,我习惯于执行以下操作: select n from NetworkElement n join fetch n.site s where s.active is true <!-- Fetch network elements --> <named-query name="fetchNetworkElements"> <query>select n from NetworkElement n</query>

使用Hibernate,我习惯于执行以下操作:

select n from NetworkElement n join fetch n.site s where s.active is true
<!-- Fetch network elements -->
<named-query name="fetchNetworkElements">
    <query>select n from NetworkElement n</query>
    <lock-mode>NONE</lock-mode>
    <hint name="eclipselink.join-fetch" value="n.site" />
    <hint name="eclipselink.join-fetch" value="n.site.area" />
</named-query>
然而,EclipseLink对此抱怨很多:


原因:异常[EclipseLink-8024](Eclipse持久性服务-2.0.0.v20091127-r5931):org.Eclipse.Persistence.exceptions.JPQLException
异常说明:分析查询时出现语法错误[select n from NetworkElement n join fetch n.site s],第1行第49列:在[s]处出现语法错误。

(堆栈上的查询与上面的查询不同,但结果相同)

我尝试过不同的组合,但没有一种有效:

select n from NetworkElement n join fetch n.site where n.site.active is true
select n from NetworkElement n join fetch n.site as site where site.active is true
我还尝试切换到域模型中的其他实体,怀疑我的映射可能不正确。然而,同样的问题

我是否只能通过查询提示来实现这一点?我不想那样做

顺便说一下,我正在使用Netbeans 6.8和Glassfish v3附带的EcliseLink

我将感谢任何帮助


Rodrigo

主要问题是JPQL语法不允许别名获取连接,这就是为什么EclipseLink使用查询提示实现此功能的原因。有一个直接在JPQL中添加别名连接获取的增强请求,如果您希望看到它完成,请投赞成票。()


--Gordon Yorke

事实上,似乎不允许在JPQL中使用fetch连接别名。。它与Hibernate一起工作,因为它支持通过HQL进行别名,并且允许您向JPA查询对象发出HQL

因此,我别无选择,只能切换到带有查询提示的命名查询。我不太喜欢用注释声明查询,因为实体类的详细程度很高,所以我在持久性单元的jar中添加了一个orm.xml文件,并执行了以下操作:

select n from NetworkElement n join fetch n.site s where s.active is true
<!-- Fetch network elements -->
<named-query name="fetchNetworkElements">
    <query>select n from NetworkElement n</query>
    <lock-mode>NONE</lock-mode>
    <hint name="eclipselink.join-fetch" value="n.site" />
    <hint name="eclipselink.join-fetch" value="n.site.area" />
</named-query>

从NetworkElement n中选择n
没有一个

希望这能给那些与原始JPQL相同缺点作斗争的人提供一些线索。

在eclipselink的bug追踪器上提交一个问题,你确定吗?Hibernate允许我通过JPA来完成。嗯,它可能是一个Hibernate扩展,但我一直认为这是一个本地JPQL特性。