2011-02-28 99 views
1

我有以下HQL查询:休眠,MySQL的

UPDATE TaskAssessment taskAssessment 
SET taskAssessment.activeFlag = false 
WHERE taskAssessment IN 
(
SELECT taskAssessment2 
FROM TaskAssessment taskAssessment2 
Where taskAssessment2.activeFlag = true 
AND taskAssessment2.patient.id 
AND taskAssessment2.needsLevel.careNeed = :careNeed 
) 

但它给我的错误:

You can't specify target table 'TASK_ASSESSMENT' for update in FROM clause 

任何人都可以帮我纠正MySQL的查询和休眠。提前致谢。

+1

见http://stackoverflow.com/questions/45494/sql- delete-cant-specify-target-table-for-update-in-from-clause – axtavt 2011-02-28 17:25:51

+0

我看到了,但是当我试着说出乎意料的时候(在查询中! – Ikthiander 2011-02-28 17:27:25

+0

@ user582862:你能发表你已经试过的东西吗? – 2011-02-28 17:35:38

回答

0

要解决You can't specify target table 'TASK_ASSESSMENT' for update in FROM clause,重写查询使用JOIN代替IN(在MySQL中,你需要写这样的事情):

UPDATE TaskAssessment a 
INNER JOIN TaskAssessment a2 ON (a2.id = a.id) 
SET a.activeFlag = 0 
WHERE a2.active_flag = 1 AND 
a2.patient_id = :patient_id AND a2.needsLevel_careNeed = :careNeed 
+0

尝试过:UPDATE TaskAssessment taskAssessment INNER JOIN TaskAssessment taskAssessment2 ON(taskAssessment.id = taskAssessment2.id)SET taskAssessment.activeFlag = false其中taskAssessment2.activeFlag = true AND taskAssessment2.patient.id =:patientId AND taskAssessment2.needsLevel.careNeed =: careneed – Ikthiander 2011-02-28 17:48:34

+0

它没有工作。给出错误:期待“设置”,找到'INNER' – Ikthiander 2011-02-28 17:48:58

+0

这是MySQL语法,而不是hql。为了使它工作,你需要使用'CreateSQLQuery' +'executeUpdate'。我不确定你是否可以在hql中使用join + update。 – a1ex07 2011-02-28 18:20:01