我有一个关于spring-data中的deleteById和delete方法的问题。这两个方法有什么区别?我应该在什么时候使用delete/deleteById?我搜索了谷歌一天,但我没有答案
elcex8rz1#
如果提供的id不存在,方法deleteById将抛出EmptyResultDataAccessException,而如果提供的entity尚未持久化,或者由于某种原因EntityManager无法找到它,方法delete将静默返回。此外,正如@manish在他们的注解中指出的,如果findById方法能够找到一个实体,则deleteById方法实际上在内部调用delete方法。
id
deleteById
EmptyResultDataAccessException
entity
EntityManager
delete
findById
nom7f22z2#
自**Spring-Boot 3.x及其相应版本spring-data-jpa起,如果所提供的id不存在于要删除的数据库中,则方法deleteById将不再**抛出EmptyResultDataAccessException的运行时异常。因此,从现在开始,deleteById(Id id)和delete(T entity)之间的唯一区别在于,第一个将把id作为参数,并且尝试在数据库中定位具有要删除的id的相关实体,而第二个将直接把要删除的entity作为参数。
Spring-Boot 3.x
spring-data-jpa
deleteById(Id id)
delete(T entity)
2条答案
按热度按时间elcex8rz1#
如果提供的
id
不存在,方法deleteById
将抛出EmptyResultDataAccessException
,而如果提供的entity
尚未持久化,或者由于某种原因EntityManager
无法找到它,方法delete
将静默返回。此外,正如@manish在他们的注解中指出的,如果
findById
方法能够找到一个实体,则deleteById
方法实际上在内部调用delete
方法。nom7f22z2#
自**
Spring-Boot 3.x
及其相应版本spring-data-jpa
起,如果所提供的
id
不存在于要删除的数据库中,则方法deleteById
将不再**抛出EmptyResultDataAccessException
的运行时异常。因此,从现在开始,
deleteById(Id id)
和delete(T entity)
之间的唯一区别在于,第一个将把id
作为参数,并且尝试在数据库中定位具有要删除的id
的相关实体,而第二个将直接把要删除的entity
作为参数。