【发布时间】:2017-01-25 11:24:17
【问题描述】:
我明白了
错误:无法在只读事务中执行更新
在下面的方法中与 user.update() 调用:
User user;
try {
user = User.finder.where().eq("phoneNumber", PhoneHelper.normalizePhoneNumber(phoneNumber)).findUnique();
} catch (NumberFormatException e) {
final ErrorMessage errorMessage = new ErrorMessage("Invalid phone number");
errorMessage.addField("phoneNumber");
return badRequest(Json.toJson(errorMessage));
}
...
some checks
...
final String newApiKey;
try {
newApiKey = UUID.randomUUID().toString();
user.addApiKey(newApiKey);
if (!isDemoUser(phoneNumber)) user.setSecurityCode(null);
user.update();
} catch (Exception e) {
Logger.warn("Can't create session", e);
return internalServerError(Json.toJson(new ErrorMessage("Can't create api_key. Please contact service administrator")));
}
return ok(Json.toJson(new ApiKey(newApiKey)));
此错误的原因可能是什么?在这种方法中,我自己没有将事务的 readOnly 值设置为“true”。请指点我的搜索方向。
用户它只是一个实体:
@Entity
@Table(name = "userr")
public class User extends Model {
...fields...
public static Finder<Long, User> finder = new Finder<>(User.class);
}
Ebean ORM 的版本是
"org.avaje.ebeanorm" % "avaje-ebeanorm" % "6.10.4"
【问题讨论】:
-
User是自定义类还是来自库的类?如果是第一个,我们至少需要查看update()方法。如果是第二个,我们需要知道它来自哪个库。 -
@Michael 当然,谢谢。我更新了我的帖子
标签: java playframework ebean