Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据JPA:deleteById不会从数据库中删除记录,但派生的delete方法会删除记录_Spring_Jpa_Spring Data Jpa - Fatal编程技术网

Spring数据JPA:deleteById不会从数据库中删除记录,但派生的delete方法会删除记录

Spring数据JPA:deleteById不会从数据库中删除记录,但派生的delete方法会删除记录,spring,jpa,spring-data-jpa,Spring,Jpa,Spring Data Jpa,我在Spring应用程序中观察到一种奇怪的行为。不幸的是,我无法分享完整的代码,但基本上是这样的: //存储库 @存储库 InboxRepo的公共接口扩展了JpaRepository{} //服务 @交易的 公共无效删除收件箱(长id){ inboxRepo.deleteById(id); } 调用deleteInbox()时,没有异常或任何类型的错误,但不会从数据库中删除Inbox项。设置spring.jpa.show sql=true表明甚至没有DELETE语句,也就是说,无论出于何种原因

我在Spring应用程序中观察到一种奇怪的行为。不幸的是,我无法分享完整的代码,但基本上是这样的:

//存储库
@存储库
InboxRepo的公共接口扩展了JpaRepository{}
//服务
@交易的
公共无效删除收件箱(长id){
inboxRepo.deleteById(id);
}
调用
deleteInbox()
时,没有异常或任何类型的错误,但不会从数据库中删除
Inbox
项。设置
spring.jpa.show sql=true
表明甚至没有
DELETE
语句,也就是说,无论出于何种原因,代码实际上不会发出删除命令

在存储库中定义派生的delete方法时,删除会起作用,但对我来说还没有意义:

@存储库
InboxRepo的公共接口扩展了JpaRepository{
//这似乎有效
@修改
@查询(“从收件箱i中删除,其中i.id=?1”)
作废删除(长id);
}

直接通过
EntityManager
进行数据传输也有效。但是“标准”的否定方法在这里不起作用的原因是什么呢?

我找到了根本原因。另一个实体引用了收件箱,如下所示:

@OneToMany(mappedBy=“收件箱”,cascade=ALL,fetch=FetchType.EAGER)
private Set inbox=new HashSet();

FetchType.EAGER
与级联一起导致了问题,即只要删除了
收件箱
,该引用就会导致
收件箱
重新持久化。设置
FetchType.LAZY
解决了问题。

其他回购方法工作正常吗?是的,其他回购工作正常。我怀疑这是某种相关实体…问题是关于同一回购的其他方法,而不是关于其他回购),但不介意)考虑到
deleteById
内部确实存在
findById
(并且
EmptyResultDataAccessException
将在实体缺失时抛出)您是否在日志中看到生成的
选择…
查询?如果没有,则可能实际生成并执行了
delete
查询,但由于某些原因,实体未被删除。