2013-05-19 2 views
3

Предположим, модель под названием User:Модели не сохраняются в Play Framework

@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(); 
    } 

никаких изменений не кажется, может быть совершено. Я где-то читал, что, когда вы изменяете экземпляр модели своим свойством, он не загрязняется, и поэтому изменений не происходит. Следовательно, вы должны использовать сеттер вместо этого. В документации Play Framework говорится, что эти сеттеры (и добытчиками) генерируются автоматически, но с использованием user.setUsername(username) дает мне ошибку компиляции:

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

я упускаю что-то?

ответ

1

Вы пытались добавить пользовательские сеттеры?

@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 
    ); 
} 
+1

Это действительно действительно выполнено, хотя я очень разочарован, автоматически созданный сеттер этого не сделал. Благодаря! –

+0

Я борюсь с той же проблемой, ну, конечно, она будет работать, если я добавлю сеттеров и геттеров вручную. Почему Play Framework не генерирует сеттеры и геттеры, а в документации, о которой он говорит? –

0

Насколько я могу судить, автоматический перевод геттера/сеттера нарушен в Play2. Ваше задание:

user.username = "some_new_username"; 

должно инициировали вызов функции:

user.setUsername("some_new_username"); 

Этого перевод, кажется, сломан в Play 2. Вот my own question на эту тему.

Смежные вопросы