アプリケーションで Hibernate を使用しています。現在、次のクエリを実行しようとしています。
DELETE FROM ActiveTimes a WHERE
a.begin>=:from AND a.begin<=:to
AND a.end>=:from AND a.end<=:to
AND a in(
SELECT al FROM ActiveTimes al
JOIN al.source.stage st
JOIN st.level.dataSource ds
WHERE ds=:dataSource)
しかし、エラーが発生します: Column 'id' in field list is ambiguous
。作成された SQL クエリは次のようになるため、これは正常に感じられます。
delete
from
active_times
where
begin>=?
and begin<=?
and end>=?
and end<=?
and (
id in (
select
id
from
active_times activeti1_
inner join
sources sourc2_
on activeti1_.source=sourc2_.id
inner join
stage stage3_
on sourc2_.id=stage3_.source
inner join
levels levels4_
on stage3_.level=levels4_.id
inner join
datasources datasource5_
on levels4_.data_source=datasource5_.id
where
id=?
)
)
クエリを次のように変更すると:
DELETE FROM ActiveTimes a WHERE
a.begin>=:from AND a.begin<=:to
AND a.end>=:from AND a.end<=:to
AND a.id in(
SELECT al.id FROM ActiveTimes al
JOIN al.source.stage st
JOIN st.level.dataSource ds
WHERE ds.id=:dataSource)
別のエラーが表示されます: You can't specify target table 'active_times' for update in FROM clause
.
私は JPQL (または HQL) をあまり試していないので、最初の例でクエリがそのように見える理由がわかりません。
どうやらMySQLの削除テーブルでサブクエリを作成できないため、新しいエラーが発生します。
上記のクエリのいずれかを機能させるために書き直す方法について何か提案はありますか?