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

4

我遇到了以下问题:

错误:无法在只读事务中执行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”。请指引我寻找解决方案。

“User”只是一个实体:

@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
User是自定义类还是库中的类?如果是前者,我们需要至少查看update()方法。如果是后者,我们需要知道它属于哪个库。 - Michael
@Michael 当然,谢谢。我已经更新了我的帖子。 - Arkady
1个回答

1
在我的情况下,只是服务层缺少 @Transactional

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接