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'

に変換する方法はありますか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必要なだけに置き換える必要があります。

2 番目の問題: 結合構文はそのようではありません。join次のように記述して、オブジェクト参照をナビゲートする必要があります。例: AK.assesmentActivity のwhere代わりにキーワードを使用します。on

結合に関するヒントは次のとおりです: JPQL 結合

覚えておいてください: あなたは ORM にいて、DB の外部キーと列ではなく、エンティティとそのプロパティを扱っています。

(ps: 多分あなたは を書きたかったのNativeQueryでしょう ? そこでネイティブ SQL 構文を使用できます)

編集:(コメントについて)AAからクエリを開始する必要があります:

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

このようにして、それらに参加できます。

于 2012-10-08T08:41:33.447 に答える