将MySql查询转换为JPA命名查询

时间:2012-10-08 08:33:14

标签: java mysql sql jpa openjpa

我有MySql这样的查询:

select AK.*, max(AA.activityDate) 
from AssessmentKey AK 
join AssessmentActivity AA on AA.ASSESSMENTKEY_ID = AK.id 
group by AK.id having max(AA.activityDate) <=  '2012-10-02 17:30:55'

有没有办法转换为JPA NamedQuery。我正在使用OpenJPA

如果我把它直接放入:

@NamedQuery(name = "AssessmentActivity.findByDate", 
  query = "select AK.*, max(AA.activityDate) from AssessmentKey AK 
           join AssessmentActivity AA on AA.ASSESSMENTKEY_ID = AK.id 
           group by AK.id having max(AA.activityDate) <=  '2012-10-02 17:30:55'")

错误显示在此处:select AK.* identifier expected, got "*"并且它不喜欢on,在这里说:

enter image description here

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

第一个问题:您应该将AK.*替换为AK,只需要此处的实体别名。

第二个问题:连接语法不是那样的。您应该编写:join并浏览对象引用,例如:AK.assesmentActivity并使用where关键字而不是on

以下是关于加入的提示:JPQL join

请记住:您在ORM中处理实体及其属性,而不是DB外键和列。

(ps:也许你想写一个NativeQuery?你可以使用原生SQL语法)

编辑: (在你的评论上)所以你必须从AA开始你的查询:

select AK from AssesmentActivity AA join AssesmentKey AK where AA.assesmentKey = AK ...

这样你可以加入他们。