我将编写一个示例代码,在标题中生成编译器警告:
@Entity class User {
private String passwordHash;
public User() {}
public User(String passwordHash) {
this.passwordHash = passwordHash;
}
@Column(name="PASSWORD")
public String getPasswordHash() {
return passwordHash;
}
private void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
}
我目前只使用hibernate填充数据库,但稍后我只会在大部分时间用它来阅读。
我无法将其更改为private final passwordHash
,因为我必须在默认的构造函数中对其进行初始化。
我现在的问题是,如果我忽略警告会发生什么,或者如何在不使SETTER公开或受到保护的情况下摆脱它?我认为hibernate可以通过反射获得它,即使它是私有的(Like described here)?
更新:
我通过删除private
二传手来测试它。 Hibernate通过反射使用它,因此setter必须在那里。但由于它是密码哈希,我无法将可见性更改为公开。受保护会没问题,但我不会高兴,因为在我看来这不是一个好的解决方案。
答案 0 :(得分:0)
如果你的类中有一个私有成员变量,你需要有一个相同的公共setter,这样就可以通过所述方法对变量状态进行任何操作。
所以你需要有一个公共方法。
答案 1 :(得分:0)
更改为仅在设置者为
private
时发出警告。它没有 有意义的是有一个私人的二传手。
查看工作流here