Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠;HQL;为什么删除查询不起作用,而选择起作用?_Java_Hibernate_Hql - Fatal编程技术网

Java 冬眠;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 = :

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

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

以下是使用的HQL示例:

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语句中的连接,还是只是默默地出错


删除子记录的更好方法是使用。

简单的问题可能会有所帮助:

  • 出于好奇,您是否在事务中运行此HQL?selects不需要事务,但deletes需要事务

  • 执行删除HQL后是否刷新会话

  • 您是在同一事务中删除,还是在不同事务中选择


  • 是的,你是对的,它们是接合的。我将研究级联删除功能,因为我相信它应该是这样工作的,但事实并非如此。必须明确删除其他相关记录是有原因的。谢谢你的回答!1.删除在事务2中。是的。单独事务您可能有一些缓存问题?我的意思是数据已从数据库中删除,但仍存在于内存中?在执行查询之前也尝试刷新会话,这可能会有所帮助。