0

我有一个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'

有没有办法转换成 in 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,这里说:

在此处输入图像描述

我该如何解决这个问题?

4

1 回答 1

2

第一个问题:你应该在这里替换AK.*AK只需要实体别名。

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

这是关于连接的提示:JPQL 连接

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

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

编辑:(根据您的评论)所以您必须从 AA 开始查询:

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

这样你就可以加入他们。

于 2012-10-08T08:41:33.447 回答