gpt4 book ai didi

java - 为什么在删除实体时会出现 StaleObjectStateException?

转载 作者:行者123 更新时间:2023-12-02 02:57:08 29 4
gpt4 key购买 nike

在我的 Spring Boot Web 应用程序中,我有一个 Controller ,它提供了一种从数据库中删除实体的方法,该方法又调用 DAO 类。但是,当我调用 entityManager.remove(entity) 时,我收到 StaleObjectStateException,即使 entity 刚刚从数据库中检索并且存在没有其他对我的 API 的调用可能会更改实体

这是我的 Controller :

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

DAO:

@Service
public class AppAdminDao extends AbstractDAO<UUID, AppAdmin> {

public AppAdmin getByUsername(String username) {
TypedQuery<AppAdmin> query = em.createQuery("SELECT a FROM AppAdmin a WHERE a.username=:username", AppAdmin.class);
query.setParameter("username", username);

try {
return query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}

public void removeByUsername(String username) {
AppAdmin admin = getByUsername(username);
if(admin != null) {
em.remove(admin);
}
}
}

通过调用添加 AppAdmin aa

AppAdmin res = em.merge(aa);

甚至在添加实体后立即调用 em.remove(res) 也会产生上述异常。我做错了什么?

最佳答案

按照PaulNUK的提示,我添加了一个@Version我的实体的注释字段。现在,我在向数据库添加实体时收到以下异常:org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 .

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

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

添加

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

解决了问题。

关于java - 为什么在删除实体时会出现 StaleObjectStateException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905256/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com