gpt4 book ai didi

JPA native 查询删除

转载 作者:行者123 更新时间:2023-12-05 00:06:47 25 4
gpt4 key购买 nike

我尝试使用 native 查询从表中删除行列表:

@NamedNativeQuery(name="WebGroup.DeleteIn",
query="DELETE FROM WebGroup WHERE
WebGroup.GROUP_ID IN (:IDsList)"

getEm().createNamedQuery("WebGroup.DeleteIn")
.setParameter("IDsList", groupToDeleteIDs)
.executeUpdate();

这是 MySQL 执行的 SQL:
DELETE FROM WebGroup WHERE WebGroup.GROUP_ID IN (:IDsList)

所以,JPA 不会替换变量 IDsList ...

有人可以帮助我吗?

最佳答案

native 查询不支持集合扩展和命名参数。

你应该写:

@NamedNativeQuery(name="WebGroup.DeleteIn", query="DELETE FROM WebGroup WHERE WebGroup.GROUP_ID IN (?,?,?,?)"

Query query = getEm().createNamedQuery("WebGroup.DeleteIn");
for(int i = 0; i < 4; i++) query.setParameter(i + 1, groupToDeleteIDs.get(i));
query.executeUpdate();

但它是 可怕

在 eclipselink + mysql 这个工作:
@NamedNativeQuery(name="WebGroup.DeleteIn", query="DELETE FROM WebGroup WHERE WebGroup.GROUP_ID IN (?)"

Query query = getEm().createNamedQuery("WebGroup.DeleteIn");
query.setParameter(1, StringUtils.join(groupToDeleteIDs, ",");
query.executeUpdate();

然而它不是很好...
但没有任何其他使用命名查询的解决方案。

关于JPA native 查询删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2858785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com