我希望能够通过简单的属性更改在 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,但是有没有一种方法可以使用特定的 fetch join 语法来取悦两个 JPA 实现?