Java 冬眠;HQL;为什么删除查询不起作用,而选择起作用?
我想从表中删除某些记录。这些记录在其他表中有一些子记录 为了能够删除主记录,我必须先删除子记录 以下是使用的HQL示例:Java 冬眠;HQL;为什么删除查询不起作用,而选择起作用?,java,hibernate,hql,Java,Hibernate,Hql,我想从表中删除某些记录。这些记录在其他表中有一些子记录 为了能够删除主记录,我必须先删除子记录 以下是使用的HQL示例: delete from ItineraryBooking ib where ib.booking.user.id = :paramId 基本上,这应该删除所有的行程预订(记录在单独的表中),这些被加入到预订表中。预订表可以与用户表联接 奇怪的是,当您将上述内容更改为: from ItineraryBooking ib where ib.booking.user.id = :
delete from ItineraryBooking ib where ib.booking.user.id = :paramId
基本上,这应该删除所有的行程预订(记录在单独的表中),这些被加入到预订表中。预订表可以与用户表联接
奇怪的是,当您将上述内容更改为:
from ItineraryBooking ib where ib.booking.user.id = :paramId
然后执行Query.list(),它就可以正常工作了
每当我想执行delete变量时,Hibernate就会生成一个奇怪的delete语句。我的HQL错了吗?或者这是一种冬眠怪癖?来自:
没有连接(隐式或显式),
可以在批量HQL查询中指定。
子查询可用于
where子句,其中子查询
它们本身可能包含连接
你的ib.booking.user.id
子句对我来说就像一个join。我不知道Hibernate是主动拒绝delete语句中的连接,还是只是默默地出错
删除子记录的更好方法是使用。简单的问题可能会有所帮助:
是的,你是对的,它们是接合的。我将研究级联删除功能,因为我相信它应该是这样工作的,但事实并非如此。必须明确删除其他相关记录是有原因的。谢谢你的回答!1.删除在事务2中。是的。单独事务您可能有一些缓存问题?我的意思是数据已从数据库中删除,但仍存在于内存中?在执行查询之前也尝试刷新会话,这可能会有所帮助。