Hibernate的; HQL; 为什么删除查询不起作用,但选择呢?

Ste*_*iks 5 java hibernate hql

我想从表中删除某些记录.这些记录在其他表中有一些子记录.

为了能够删除主记录,我必须先删除子记录.

以下是使用的HQL示例:

delete from ItineraryBooking ib where ib.booking.user.id = :paramId
Run Code Online (Sandbox Code Playgroud)

基本上,这应该删除所有ItineraryBookings(单独表中的记录),这些都加入到Booking表中.可以使用User表连接Booking表.

奇怪的是,当您将上述内容更改为:

from ItineraryBooking ib where ib.booking.user.id = :paramId
Run Code Online (Sandbox Code Playgroud)

并执行Query.list(),它会正常工作.

每当我想执行delete变体时,看起来Hibernate会生成一个奇怪的删除语句.我的HQL错了吗?还是Hibernate的怪癖?

ska*_*man 7

休眠手册:

在批量HQL查询中不能指定隐式或显式的连接.子查询可以在where子句中使用,子子查询本身可以包含连接.

你的ib.booking.user.id条款看起来像是对我的加入.我不知道Hibernate是否主动拒绝删除语句中的连接,或者只是默默地弄错了.

删除子记录的更好方法是使用级联删除.