微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么JpaRepository.delete在删除实体之前先检索它?

如何解决为什么JpaRepository.delete在删除实体之前先检索它?

当我使用其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的数据库服务的Web应用程序,因此该应用程序发出的每个请求都需要额外的钱。为什么Spring在删除对象之前先检索该对象,并且有什么方法可以阻止它执行此操作?

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。