当前位置: 首页 > 知识库问答 >
问题:

如何使Hibernate生成的sql在运算符中使用而不是在相等运算符中使用

彭博厚
2023-03-14

我想要的是Hibernate生成1条语句删除所有子级的方法,而不是每个子级1条语句。

如果实体a和B之间存在关系,其中a是父对象,B可以是多个子对象。如果我在实体关系上使用注释,如OrphanRemoving或OnCascade delete,那么当我删除父对象时,自动生成的sql会显示

delete from table where id=?  - per child

我想让Hibernate做的是生成SQL

delete from table where id in (child1,child1)

是否有一个注释或设置我可以用来轻松做到这一点?

我觉得我不是第一个遇到这个问题的人,但是除了编写自己的sql并删除注释之外,我找不到任何方法来解决这个问题。

共有1个答案

乜璞瑜
2023-03-14

您不能使用entityManager.remove()执行此操作,但可以使用executeUpdate()

Query q = entitiyManager.createQuery("delete from table where id in :ids)");
q.setParameter("id", <list of ids>);
q.executeUpdate();

请阅读文档中的更多内容:https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#batch-批量hql更新删除

 类似资料:
  • 我试图用if-let表达来概括我的大脑。我知道它的作用,但我找不到一些细节背后的基本原理。 第一个细节是赋值运算符而不是相等运算符的使用,第二个细节是操作数的位置。 例如: 在我看来,这样更“清晰”: 或者更好: 有人能帮我理解这背后的原理吗?

  • 问题内容: 我正在尝试在Dropwizard上使用MYSQL JDBI进行IN查询(我认为不相关)。 如这里的建议,我还用 但是,当我启动应用程序时,出现以下错误: 有谁对解决这个问题有个好主意? 问题答案: 有两种方法可以实现它。 1 。使用 该注释期望StringTemplate中具有SQL语句的组文件 说我有这个文件PersonExternalizedSqlDAO 由于我们正在使用,因此必须

  • 首先,我想问为什么默认三向运算符的行为不同于用户定义运算符? 其次,这个问题的解决方案对于类是正确的,还是应该以不同的方式处理? 这只是一个简单的例子,我想到了更复杂的情况,有几十个字段和联合(如果您不知道我的意思,请查看一些Intel API;))。 我稍微修改了示例中的类,以便更多地描述实际生活中的问题(当默认运算符不是有效的解决方案时)。我还想澄清,我想知道这些差异背后的原因(用户定义和默认

  • 问题内容: 我有和数组两个值,我想在选择查询中将它与sql IN运算符一起使用。 这是我桌子的结构 我有两个值的数组 我想获取comp_id 1和comp_id 2的记录。因此,我编写了以下查询。 但是它不会返回结果。 问题答案: 由于您拥有普通 整数 就可以做到… (由于不断出现,一些其他信息…) 如果使用 字符串 (特别是 不受信任的 )输入,可以做到 但不能处理NULL之类的值。并会添加引号

  • 问题内容: 首先,如果“别名”是错误的单词,请纠正我。我是在谈论用运算符重命名该列。 所以我正在尝试计算这样的平均值: (查询可能是错误的,只是一个简单的例子) 在此查询中, 给出一个错误: 因此,如何解决此问题以继续使用别名,而不是编写以下代码: 谢谢你的帮助 ! 问题答案: 我相当确定不可能使用这样的别名。您将不得不“漫长”地做下去… 编辑: 我想将此答案编辑为第二个 @jbeldock 的答

  • 问题内容: 有人可以简单地向我解释什么是(有条件的“三元”)运算符,以及如何使用它? 问题答案: 这是if-else语句的单行缩写。它称为条件运算符。1个 这是可以通过条件运算符缩短的代码示例: 可以这样缩短: 与所有表达式一样,条件运算符也可以用作具有副作用的独立语句,尽管在缩小之外这是不常见的: 它们甚至可以链接: 但是要小心,否则最终将得到如下复杂的代码: 1 通常称为“三元运算符”,但实际