2012-01-01 65 views
0

我正在尝试从yaml文件加载模型。内容是:从YAML文件加载模型数据

#test data 

    User(marchaos): 
     username:  marchaos 
     email:  [email protected] 
     passwordHash: cf6dd541822b1b3d2d23c92adda75211 

模型看起来像这样。

@Entity 
public class User extends Model 
{ 
    @Unique 
    @Required 
    private final String username; 

    @Email 
    @Required 
    private final String email; 

    @Required 
    private final String passwordHash; 

    public User(String username, String email, String password) 
    { 
     this.username = username; 
     this.email = email; 
      //TODO: salt 
     this.passwordHash = Codec.hexMD5(password); 
    } 

    public String getUsername() 
    { 
     return username; 
    } 

    public String getEmail() 
    { 
     return email; 
    } 
} 

的YAML文件被加载在Bootstrap类:

Fixtures.loadModels("User.yml"); 

用户看起来像是被创建,但所有的字段为空:

System.out.println(((User) User.all().first()).getUsername()); 
// prints null 

知道为什么会有没有数据的用户?如果我使用构造函数创建用户,则存在用户数据。

回答

2

确保您只在您的YAML文件中使用空格没有标签

你还需要有公共无参数构造函数属性不允许是最终,如果你让它们私密,你将不得不为他们提供一个setter。

注意:你不应该用md5来散列你的密码。它的安全风险(彩虹色)

+0

我知道md5问题(因此盐评论)。当我使用标签时出现错误,所以不是这样。任何其他想法可能是什么? – marchaos 2012-01-01 19:17:50

+0

将我的密码字段设置为私人后,就像一个魅力工作,然后yaml不得不使用setter。 – nbz 2015-03-16 16:35:09

1

我相信问题是你的用户属性被标记为final和private。从play documentation你可以阅读:

的惯例是,任何公共的,非静态,非最终一 类的领域被视为财产。

+0

就是这样。我认为文件可能会更清晰一些。 – marchaos 2012-01-02 17:43:29

+0

播放文档链接已损坏。 – GreenAsJade 2013-12-31 06:39:23