我有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
,在这里说:
如何解决此问题?
答案 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 ...
这样你可以加入他们。