我正在尝试从yaml文件加载模型。内容如下:
#test data
User(marchaos):
username: marchaos
email: marchaos@email.com
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
知道为什么没有用户数据?如果我使用构造函数创建用户,则存在用户数据。
答案 0 :(得分:2)
确保您的yaml文件中仅使用空格和无标签。
您还需要公共无参数构造函数。 属性不允许是最终的,如果你将它们设为私有,则必须为它们提供一个setter。
旁注:您不应使用md5哈希密码。它的安全风险(rainbowtables)
答案 1 :(得分:1)
我认为问题在于您的用户属性被标记为final和private。从play documentation开始,您可以阅读:
惯例是任何公共的,非静态的,非最终的领域 阶级被视为财产。