我正在使用Spring JPA进行数据库访问。我能够找到像findByName和countByName这样的例子,我不需要为它们编写任何方法实现。我希望能找到基于某些条件删除一组记录的例子。
Spring JPA是否支持类似deleteByName的delete?任何指针都是可取的。
致以问候和感谢。
发布于 2014-05-19 14:31:21
从Spring Data JPA的1.6.0.RC1版本开始,支持使用给定方法名称派生delete查询。支持关键字remove
和delete
。作为返回值,用户可以在删除的实体的数量或列表之间进行选择。
Long removeByLastname(String lastname);
List<User> deleteByLastname(String lastname);
发布于 2019-11-05 18:31:04
两种方式:
第1个自定义查询
@Modifying
@Query("delete from User where firstName = :firstName")
void deleteUsersByFirstName(@Param("firstName") String firstName);
第二个按方法的JPA查询
List<User> deleteByLastname(String lastname);
当你使用query by方法(第二种方法)时,它将首先执行get调用
select * from user where last_name = :firstName
然后,它会将其加载到列表中,然后逐个调用delete id。
delete from user where id = 18
delete from user where id = 19
首先获取对象列表,然后使用for循环逐个删除id
但是,第一个选项(自定义查询)
这只是一个查询,它将删除任何存在该值的查询。
由于在第二个选项中是进行多个数据库查询,请尝试使用第一个选项。
发布于 2014-05-18 23:46:36
如果您查看一下Spring Data JPA的源代码,特别是PartTreeJpaQuery
类,您将看到它试图实例化PartTree
。在该类内部,使用以下正则表达式
private static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
应该指出什么是允许的,什么不是。
当然,如果您尝试添加这样的方法,您实际上将看到它不起作用,并且您将获得完整的堆栈跟踪。
我应该注意到,我使用的是Spring Data JPA的1.5.0.RELEASE
版本
https://stackoverflow.com/questions/23723025
复制相似问题