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