持久属性的setter方法不应该是私有的

时间:2015-12-08 08:52:56

标签: java hibernate jpa

我将编写一个示例代码,在标题中生成编译器警告:

@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必须在那里。但由于它是密码哈希,我无法将可见性更改为公开。受保护会没问题,但我不会高兴,因为在我看来这不是一个好的解决方案。

2 个答案:

答案 0 :(得分:0)

如果你的类中有一个私有成员变量,你需要有一个相同的公共setter,这样就可以通过所述方法对变量状态进行任何操作。

所以你需要有一个公共方法。

答案 1 :(得分:0)

  

更改为仅在设置者为private时发出警告。它没有   有意义的是有一个私人的二传手。

查看工作流here