【问题标题】:ERROR: cannot execute UPDATE in a read-only transaction错误:无法在只读事务中执行更新
【发布时间】: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


【解决方案1】:

就我而言,这只是服务层上缺少的@Transactional..

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多