У меня есть приложение 2.1.3 Java Java, использующее Ebean. Я получаю исключение OptimisticLockException ниже.OptimisticLockException с Ebean/Play
[OptimisticLockException: Data has changed. updated [0] rows sql[update person
set name=? where id=? and email=? and name=? and password is null and created=?
and deleted is null] bind[null]]
Я понимаю, что он пытается сказать мне, что запись изменилась между моментом, когда я прочитал его, и когда я пытался писать. Но в этом методе происходит единственное изменение.
public void updateFromForm(Map<String, String[]> form) throws Exception {
this.name = form.get("name")[0];
String password = form.get("password")[0];
if (password != null && password.length() != 0) {
String hash = Password.getSaltedHash(password);
this.password = hash;
}
this.update();
}
Я делаю это неправильно? Я видел подобную логику в zentasks. Кроме того, должен ли я видеть значения для переменных связывания?
UPDATE: Я зову updateFromForm() внутри контроллера:
@RequiresAuthentication(clientName = "FormClient")
public static Result updateProfile() throws Exception {
final CommonProfile profile = getUserProfile();
String email = getEmail(profile);
Person p = Person.find.where().eq("email", email).findList().get(0);
Map<String, String[]> form = request().body().asFormUrlEncoded();
if (p == null) {
Person.createFromForm(form);
} else {
p.updateFromForm(form);
}
return ok("HI");
}
Не могли бы вы включить метод, в котором вы вызываете 'updateFromForm'? – mantithetical
Хорошо, я обновил его. Я вызываю updateFromForm() внутри контроллера. updateFromForm сам определяется в модели. Знаете ли вы, я должен увидеть значения для переменных привязки в своем сообщении об ошибке или нет? Спасибо за любую помощь. – latj