的EclipseLink JPQL(Glassfish的第三版):连接抓取语法问题?
-
22-09-2019 - |
题
使用Hibernate的,我用来做像下面这样:
select n from NetworkElement n join fetch n.site s where s.active is true
然而,抱怨的EclipseLink了很多关于这样的:
Caused by: Exception [EclipseLink-8024] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [select n from NetworkElement n join fetch n.site s], line 1, column 49: syntax error at [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
我还试图在我的域模型切换到不同的实体,怀疑也许我的映射是不正确的。尽管如此,同样的问题。
难道是我只能实现此使用查询提示?我不想这样做。
顺便说一句,我使用EcliseLink作为随NetBeans 6.8和Glassfish的第三版。
我会很感激任何帮助!
罗德里戈
解决方案
主要的问题是,JPQL语法不允许混叠获取连接,这就是为什么使用的EclipseLink查询提示此功能。有一个增强请求添加混叠在JPQL直接加入取,如果你想看到它完成了它,请投票。 ( https://bugs.eclipse.org/bugs/show_bug.cgi?id = 293775 )。
- 戈登约克
其他提示
好了,似乎一个不允许别名抓取连接在JPQL,的确..它的工作原理与Hibernate,因为它支持通过HQL走样,并允许您的问题HQL到JPA Query对象。
因此,我只好切换到与查询提示命名查询。我真的不喜欢,宣布与查询因为实体类高冗长的注解,所以我加了一个orm.xml文件的持久单元的罐子,做了以下内容:
<!-- 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>
希望这给某些线索任何与原料JPQL的相同的缺点挣扎。