2016-08-25 52 views
0

這是我的要求。我有一堆有類似數據的行。我想更新最新條目中的一些列。所以我寫了一個Hibernate查詢這是這樣的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

嘗試

字符串HQL =「UPDATE Studenttable t將T.timestamp =:時間,T.Action =:行動其中T.StudentId =:studentId和T.teacherId =:通過T.timestamp 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子句」......不過謝謝。我會繼續嘗試。 –