【发布时间】:2011-03-30 08:46:36
【问题描述】:
我希望能够通过简单的属性更改在 EclipseLink 和 Hibernate 之间交换我的 JPA 实现。我可以做到这一点,但导致我出现问题的是命名查询验证。使用 EclipseLink 我必须像这样编写获取连接:
SELECT id
FROM IndexDefinition id
JOIN FETCH id.index
JOIN id.index i
JOIN FETCH i.indexVersions
但是当使用 Hibernate 验证这个查询时,我得到了以下异常:
org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
所以我可以像这样将查询更改为对 HQL 友好:
SELECT id
FROM IndexDefinition id
JOIN FETCH id.index i
JOIN FETCH i.indexVersions
但这会在 EclipseLink 中导致以下异常:
Exception Description Syntax error parsing the query [IndexDefinition.getForIndex] SELECT id FROM IndexDefinition id JOIN FETCH id.index i, syntax error at [id].
Internal Exception MismatchedTokenException(78!=-1)
我知道我可以在我的 DAO 级别使用查询提示来执行 fetch join,但是有没有一种方法可以让两个 JPA 实现都使用特定的 fetch join 语法?
【问题讨论】:
-
您使用的是什么版本的 Hibernate 和 EclipseLink?对我来说,第一个查询在 Hibernate EM 3.4.0.GA 上运行良好。
-
抱歉,查询中缺少一行。我已通过编辑进行了更正。我正在使用 hibernate-entitymanager 的 3.5.1-Final 版本
标签: hibernate jpa eclipselink jpql fetch