Java 为什么删除实体时会出现StaleObjectStateException?

Java 为什么删除实体时会出现StaleObjectStateException?,java,jpa,spring-boot,Java,Jpa,Spring Boot,在我的SpringBootWeb应用程序中,我有一个控制器,它提供了一种从数据库中删除实体的方法,该方法反过来调用DAO类。然而,当我调用entityManager.removeentity时,我会收到一个StaleObjectStateException,即使该实体刚刚从数据库中检索到,并且没有其他对API的调用可能会改变该实体 这是我的控制器: @Transactional @RestController public class AppAdminController { ...

在我的SpringBootWeb应用程序中,我有一个控制器,它提供了一种从数据库中删除实体的方法,该方法反过来调用DAO类。然而,当我调用entityManager.removeentity时,我会收到一个StaleObjectStateException,即使该实体刚刚从数据库中检索到,并且没有其他对API的调用可能会改变该实体

这是我的控制器:

@Transactional
@RestController
public class AppAdminController {
    ...
    @RequestMapping(value = "/admins/{username}", method = RequestMethod.DELETE)
    public void deleteAdmin(@PathVariable("username") String username) {
        dao.removeByUsername(username);
  }
}
道:


即使在添加实体后立即调用em.removes,也会产生上述异常。我做错了什么?

根据PaulNUK的提示,我在实体中添加了一个@Version注释字段。现在,我在向数据库添加实体时收到以下异常:org.hibernate.StaleStateException:Batch update从更新[0]返回意外的行数;实际行数:0;预期:1

问题是:我的实体有一个UUID作为id,其注释如下:

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
添加

@Column(columnDefinition = "BINARY(16)")

已解决问题。

可能是实体缺少未保存的值映射?顺便问一下,为什么不直接使用Spring数据JPA呢?Dao可以压缩为:公共接口ChainLevelRepository扩展了JpaRepository{}如何添加未保存的值映射?我将看一看Spring数据JPA
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")