gpt4 book ai didi

hibernate - 如何处理 Spring Data JPA 中 ID 数组的批量删除?

转载 作者:行者123 更新时间:2023-12-02 18:53:56 25 4
gpt4 key购买 nike

现在我有一个 User 类,我从 jsphtml 获取 array 的请求数据。

列出这个Integer[] arr=[5,6,9,10,62,52,21]

然后我使用两种方法完成批量删除操作。

@Transactional
@Override
public void deleteUser(Integer id) {

oneRepository.delete(id);
}


@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {

for (Integer id : ids) {

deleteUser(id);

}

}

我想知道这是否是完成此操作的更有效方法。

你可以看到我的日志:好像不太好!

[94, 95, 91, 92, 93]
Hibernate:
delete
from
sshh_user
where
ID=?


Hibernate:
delete
from
sshh_user
where
ID=?



Hibernate:
delete
from
sshh_user
where
ID=?



Hibernate:
delete
from
sshh_user
where
ID=?



Hibernate:
delete
from
sshh_user
where
ID=?



Hibernate:
select
count(practice0_.ID) as col_0_0_
from
sshh_user practice0_

最佳答案

只需将以下内容添加到您的用户存储库界面

void deleteByIdIn(List<Integer> ids);

Spring 将通过方法名称派生自动生成适当的查询。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

编辑:更多细节

使用 Springs Repository 接口(interface),如 CrudRepository , JpaRespository带来了基本的数据库操作集,如创建、读取、更新、删除、分页、排序等。

要手动添加一些简单的查询,例如搜索用户名或邮件地址,Spring 提供了一种很好的机制,无需注释任何基于字符串的 HQL 查询或类似查询。

Spring 只是分析你的方法名称,搜索关键字。阅读上面提供的关键字的文档链接。

CrudRepository<User> 的示例方法:

Iterable<User> findByNameLike(String search)解析为 select * from user where name like '<search>'

void deleteByIdIn(List<Integer> ids)解析为 delete from user where id in ([ids])

更新:

这只能在 Spring Boot 版本 < 2.0 中用作真正的批量删除!

自 Spring Boot 2.0 起,它将导致单个删除查询来支持 JPA 实体生命周期事件,例如 preRemovepostRemove .

如果您想真正批量删除,请使用接受的答案。

关于hibernate - 如何处理 Spring Data JPA 中 ID 数组的批量删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763440/

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