2

HQL に次のクエリがあります。

update ProjectFile pf1 
set pf1.validUntil.id =123
where pf1 = (
select pf from ProjectVersion pv, ProjectFile as pf 
where pf.validFrom.sequence <= pv.sequence 
and pf.validUntil.sequence >= pv.sequence
and pf.state <> 12
and pf.projectVersion.project.id = 1
and pv.project.id = 1
and pv.id = 12
and pf.id not in (2,3,4)
)

Hibernate はクエリを正しく解析して SQL を生成しますが、データベース (MySQL) は次のエラーで失敗します。

FROM 句で更新対象のテーブル 'ProjectFile' を指定することはできません

問題は、更新されるテーブルが同じコンテキストでクエリされていることのようです。HQL クエリを書き直して、MySQL で正しく実行できる SQL を生成する方法はありますか? もう 1 つのアプローチは、中間テーブルを作成することです。これはまさに私が避けようとしているものです。

4

1 に答える 1

0

私は同じ問題に遭遇し、ここに質問を投稿しました: MySQL/SQL: 更新されたテーブル自体からの相関サブクエリによる更新

問題を解決するには、UPDATE レベルで参加する必要があります。私の質問への回答をご覧ください。

于 2009-05-26T13:44:55.173 に答える