2016-08-25 5 views
0

これは私の必要条件です。私は同様のデータを持つ一連の行を持っています。私は最新のエントリのいくつかの列を更新したいと思います。だから私は、これは何このJava Hibernate:MySqlデータベースの最新のエントリを更新する

String hql = "UPDATE Studenttable T set T.timestamp=:time,T.Action=:action where T.StudentId=:studentId and T.teacherId=:TeacherId order by T.teacher_student_mapping_id DESC"; 
Query query = session.createQuery(hql); 
query.setParameter("time",time); 
query.setParameter("studentId", studentId); 
query.setParameter("TeacherId", teacherId); 
query.setParameter("action", action); 
query.setMaxResults(1); 
query.executeUpdate(); 

ように書き休止クエリを書かれていることが条件を満たした後、最新の行を返すすべての行を更新しています。代わりに、条件を満たす最新の行を取り出して更新したいと思っています。どうしたらいいですか?どんな援助も深く感謝しています。

P.S. teacher_student_mapping_idは、自動生成された値であり、プライマリキーでもあります。

時刻は現在の時刻です。

テーブルの意味を理解しようとしないでください。私は機密保持のために列の名前を変更しました。

答えて

0

=「UPDATE Studenttable TはT.timestamp =を設定し

文字列HQLを試してください:時間、T.Action = T.timestampによってTeacherId順序:アクションT.StudentId =:studentIdとT.teacherId = DESC LIMIT 1 ";

0

タグ付きのhqlでは、以下のようなものを試すことができます。 pkに基づいて最新のもののみを更新します。

UPDATE Studenttable T set T.timestamp=:time,T.Action=:action where T.StudentId=:studentId and T.teacherId=:TeacherId 
and T.pk = (select max(tb.pk) from Studenttable tb where tb.StudentId=:studentId and tb.teacherId=:TeacherId) 
+0

これは「あなたはfrom句からの更新のためにターゲットテーブルを返すことができません」と返します。私は努力し続けます。 –

関連する問題