4

假设一个名为 的模型User

@Entity
public class User extends Model {
    @Id
    @Constraints.Min(10)
    public Long id;

    @Constraints.Required
    public String username;

    @Constraints.Required
    public String password;

    public static Finder<Long, User> find = new Finder<Long, User>(
        Long.class, User.class
    );
}

当我尝试更新User控制器中的实例时:

    User user = User.find.where().eq("username", username).findUnique();

    if(user != null) {
        user.username = "some_new_username";
        user.save();
    }

似乎没有提交任何更改。我在某处读到,当您通过其属性更改模型实例时,它不会变脏,因此不会发生任何更改。因此,您应该改用 setter。在 Play Framework 的文档中,据说这些设置器(和获取器)是自动生成的,但是使用user.setUsername(username)给了我一个编译错误:

cannot find symbol [symbol: method setUsername(java.lang.String)] [location: class models.User]

我错过了什么吗?

4

2 回答 2

2

您是否尝试过添加自定义设置器?

@Entity
public class User extends Model {
    @Id
    @Constraints.Min(10)
    public Long id;

    @Constraints.Required
    public String username;

    public void setUsername(String _username) {
        username = _username;
    }

    @Constraints.Required
    public String password;

    public void setPassword(String _password) {
        password = _password;
    }

    public static Finder<Long, User> find = new Finder<Long, User>(
        Long.class, User.class
    );
}
于 2013-05-19T23:02:45.813 回答
1

据我所知,自动 getter/setter 转换在 Play2 中被破坏了。你的任务:

user.username = "some_new_username";

应该触发了函数调用:

user.setUsername("some_new_username");

这个翻译似乎在 Play 2 中被打破了。这是我自己关于这个主题的问题。

于 2013-05-20T13:50:33.693 回答