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

问题描述 投票:2回答:1

我得到

错误:无法在只读事务中执行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"
java playframework ebean
1个回答
0
投票

只是少了一个 @Transactional 在我的情况下,在服务层.

© www.soinside.com 2019 - 2024. All rights reserved.