JPA加入查询不起作用

时间:2013-01-02 11:21:46

标签: java mysql jpa

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

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

AssessmentAssessmentText的关系为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数据库。

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

4 个答案:

答案 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(如果你这样做的话)。