在我的 Play2 应用程序中,我有一个名为user的模型类。它包含一个删除方法:
public static void delete(Long id) {
find.ref(id).delete();
}
我的控制器中的删除操作如下所示:
public static Result deleteUser(Long id) {
User user = User.find.ref(id);
if(user == null) {
return notFound();
} else {
User.delete(id);
return ok();
}
}
如果用户存在,我的目的是在尝试删除它之前给出反馈。否则,如果用户不存在,我总是会收到以下异常:
[OptimisticLockException:数据已更改。更新了 [0] 行 sql[从 id=? 的用户中删除]
但是find.ref
我在控制器中使用的方法永远不会返回null
,无论用户是否存在。因此,删除方法总是被调用,并且我上面提到的异常会引发。
如何正确地做到这一点?我可以使用find.byId
代替find.ref
(byId 应按预期返回 null),但我不想加载整个数据以检查用户是否存在。
编辑:除了上面的问题,为什么我在尝试删除不存在的用户时会收到 OptimisticLockException?对我来说没有意义...