使用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的相同的缺点挣扎。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top