我正在尝试使用JPA JOIN。这是我的JPA查询:
SELECT o FROM Assessment AS o
INNER JOIN AssessmentText at
WHERE o = at.assessment
AND at.localeCode = :localeCode
Assessment
与AssessmentText
的关系为OneToMany
。
当我执行此查询时,我得到:
org.apache.openjpa.persistence.ArgumentException:
Encountered "INNER JOIN AssessmentText at" at character 31,
but expected: [".", "FETCH", "INNER", "JOIN", "LEFT", <IDENTIFIER>].
我正在使用JPA实现:OpenJPA 2.2.1与MySQL数据库。
为什么我会收到此错误以及如何解决此问题?
答案 0 :(得分:1)
假设你想要获取AssessmentText,你可以这样做(减免评估有一个名为assessmentText的成员):
SELECT o FROM Assessment AS o LEFT JOIN FETCH o.assessmentText WHERE o.assessmentText.localeCode = :localeCode
答案 1 :(得分:0)
您的查询中缺少ON
它应该类似于
SELECT o FROM Assessment AS o INNER JOIN AssessmentText at ON o = at.assessment WHERE at.localeCode = :localeCode
答案 2 :(得分:0)
您没有提到从评估到评估文本的关系 - 它需要在联接声明中使用。
您所拥有的查询显示了从AssessmentText到Assessment的关系,如果您稍微重构查询,则可以使用该关系:
SELECT at.assessment FROM AssessmentText at WHERE at.localeCode = :localeCode
答案 3 :(得分:0)
请记住,您应该按以下方式创建查询:
Query query = entityManager.createQuery(queryString);
不是em.createNativeQuery
(如果你这样做的话)。