spring - 为什么 JpaRepository.delete() 在删除实体之前检索它?

标签 spring spring-boot spring-data-jpa

当我使用实体的 ID 删除实体时,我得到以下日志输出。

2020-09-19 17:07:35.536 DEBUG 14544 --- [nio-8080-exec-2] org.hibernate.SQL                        : select comment0_.id as id1_15_0_, comment0_.acceptedAsAnswer as accepted2_15_0_, comment0_.commentDate as commentD3_15_0_, comment0_.commenter_id as comment10_15_0_, comment0_.commenterIp as commente4_15_0_, comment0_.content as content5_15_0_, comment0_.dateDeleted as dateDele6_15_0_, comment0_.deleted as deleted7_15_0_, comment0_.deleter_id as deleter11_15_0_, comment0_.journal_entry_id as journal12_15_0_, comment0_.language_id as languag13_15_0_, comment0_.lastEditedOn as lastEdit8_15_0_, comment0_.likeTotal as likeTota9_15_0_, comment0_.owning_comment_id as owning_14_15_0_ from comments comment0_ where comment0_.id=?
2020-09-19 17:07:35.562 DEBUG 14544 --- [nio-8080-exec-2] org.hibernate.SQL                        : delete from comments where id=?

我正在构建一个使用 Amazon 数据库服务的网络应用程序,因此该应用程序发出的每个请求都需要额外付费。为什么 spring 在删除对象之前先检索对象,有什么办法可以阻止它这样做吗?

最佳答案

正如@Naim 指出的那样,hibernate 首先检索对象,因为可能存在拦截器。这是我使用 JpaRepository 实现存储库直接对数据库进行删除查询的解决方案。

@Modifying
@Transactional
@Query(nativeQuery = true, value = "DELETE FROM comments WHERE id = :id")
void deleteById(@Param("id") Long id); 

自定义方法 deleteById 不需要先获取实体。

关于spring - 为什么 JpaRepository.delete() 在删除实体之前检索它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970346/

相关文章:

java - 如何创建跨服务域模型映射?

java - 出现错误 : The type java. util.Map$Entry 无法解决。它是从必需的间接引用的

java - Spring MVC 3 JSF 2 与 Maven

java - 如何在 Maven 构建期间删除/排除 Log4j?

java - Spring Data Rest not working——寻找无限递归错误的根源

java - 建模可选的一对多关系 - 我应该使用继承吗?

java - Spring - RestController 注释没有捕获请求

java - Bluemix Maven Spring Boot 构建和部署无效的目标版本

java - CRUDrepository(spring boot)中自定义方法的问题

java - 如何在@Query 注释中使用参数的方法