2012-01-01 10 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ファイルには、ブートストラップクラスにロードされます。

Fixtures.loadModels("User.yml"); 

それが作成されるようにユーザーが見えますが、すべてのフィールドがnull:

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

任意のアイデア理由ユーザーのためのデータはありませんか?コンストラクタを使用してユーザを作成すると、ユーザデータが存在します。

答えて

2

は、あなたがだけあなたのYAMLファイルにスペースなしのタブを使用してください。

また、パブリック引数なしコンストラクタが必要です。 のプロパティは最終的ににはできません。プライベートにする場合は、それらのセッターを用意する必要があります。

サイドノート:md5でパスワードをハッシュしないでください。そのセキュリティ上のリスク(rainbowtables)

+0

私はmd5の問題(塩のコメント)を知っています。私はタブを使うとエラーになるので、そうではありません。それ以外のアイデアは何ですか? – marchaos

+0

私のパスワードフィールドをプライベートに設定した後に魅力的に働きました。そして、yamlはセッターを使用しなければなりませんでした。 – nbz

1

私は、あなたのユーザーのプロパティが最終的かつプライベートであると考えていると考えています。 play documentationからは読むことができます:

大会は クラスのいずれかの公共、非静的、非最終フィールドはプロパティとして見られているということです。

+0

それはそれでした。私はドキュメントが少しはっきりしていると思う。 – marchaos

+0

プレイドキュメントのリンクが壊れています。 – GreenAsJade

関連する問題