1

我正在尝试将 JOIN 与 JPA 一起使用。这是我的 JPA 查询:

SELECT o FROM Assessment AS o 
INNER JOIN AssessmentText at 
WHERE o = at.assessment 
AND at.localeCode = :localeCode

Assessmentto的关系AssessmentTextOneToMany

当我执行此查询时,我得到:

org.apache.openjpa.persistence.ArgumentException: 
    Encountered "INNER JOIN AssessmentText at" at character 31, 
    but expected: [".", "FETCH", "INNER", "JOIN", "LEFT", <IDENTIFIER>].

我正在使用 JPA 实现:带有 MySQL 数据库的 OpenJPA 2.2.1。

为什么我会收到此错误以及如何解决此问题?

4

4 回答 4

1

假设您想急切获取 AssessmentText,您可以这样做(假设 Assessment 有一个名为 AssessmentText 的成员):

SELECT o FROM Assessment AS o LEFT JOIN FETCH o.assessmentText WHERE o.assessmentText.localeCode = :localeCode
于 2013-01-02T11:26:09.107 回答
0

您的查询中缺少ON它应该类似于

SELECT o FROM Assessment AS o INNER JOIN AssessmentText at ON o = at.assessment WHERE at.localeCode = :localeCode

于 2013-01-02T11:31:08.137 回答
0

您没有提到从 Assessment 到 AssessmentText 的关系是 - 它需要在连接声明中使用。

您确实拥有的查询显示了从 AssessmentText 到 Assessment 的关系,如果您稍微重构查询,则可以使用该关系:

SELECT at.assessment FROM AssessmentText at WHERE at.localeCode = :localeCode
于 2013-01-02T14:14:04.510 回答
0

请记住,您应该通过以下方式创建查询:

Query query = entityManager.createQuery(queryString);

不是em.createNativeQuery(如果你这样做的话)。

于 2017-02-07T09:19:15.030 回答