错误:无法在只读事务

时间:2017-01-25 11:24:17

标签: java playframework ebean

我得到了

  

错误:无法在只读事务中执行UPDATE

在以下方法的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"

1 个答案:

答案 0 :(得分:0)

在我看来,这只是服务层上缺少的@Transactional