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 つのアプローチは、中間テーブルを作成することです。これはまさに私が避けようとしているものです。