gpt4 book ai didi

java - 如何正确删除实体并获得反馈(Play/Ebean)?

转载 作者:行者123 更新时间:2023-11-30 11:29:38 27 4
gpt4 key购买 nike

在我的 Play2 应用程序中,我有一个名为 user 的模型类。它包含一个删除方法:

public static void delete(Long id) {
find.ref(id).delete();
}

我的 Controller 中的删除操作如下所示:

public static Result deleteUser(Long id) {
User user = User.find.ref(id);
if(user == null) {
return notFound();
} else {
User.delete(id);
return ok();
}
}

我的意图是在尝试删除用户之前,如果用户存在则给予反馈。否则,如果用户不存在,我总是会得到以下异常:

[OptimisticLockException: Data has changed. updated [0] rows sql[delete from user where id=?]

但是我在 Controller 中使用的 find.ref 方法永远不会返回 null,无论用户是否存在。正因为如此,删除方法总是被调用并引发我上面提到的异常。

如何正确地做到这一点?我可以使用 find.byId 而不是 find.ref (byId 应该按预期返回 null),但我不想加载整个数据以检查是否存在一个用户。

编辑:除了上述问题,为什么我在尝试删除不存在的用户时会收到 OptimisticLockException?对我来说没有意义...

最佳答案

试试这个:

public static Result deleteUser(Long id) {
User user = User.find.byId(id);
if(user == null) {
return notFound();
} else {
user.delete();
return ok();
}
}

当然,您可以构建更简单的查询,而不是用关系加载整个对象 - 即,仅获取 id 字段:

User user = User.find.select("id").where().eq("id",id).findUnique();

关于java - 如何正确删除实体并获得反馈(Play/Ebean)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230575/

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