是否可以在 Hibernate/JPA 中具有不可变字段?
2022-09-02 00:55:17
在我们的应用程序中,我们需要具有只能分配一次的字段。
起初,我们考虑封装字段并使设置者私有。但是,有些问题会引起:
- 如果没有公共 setter,Hibernate 是否仍能从数据库中映射字段?
- 是否可以去掉 setter 并使字段仅在实体构造函数中可变?
- 最后,是否有任何标准的JPA方法来使字段不可变?
提前致谢。
在我们的应用程序中,我们需要具有只能分配一次的字段。
起初,我们考虑封装字段并使设置者私有。但是,有些问题会引起:
提前致谢。
尝试
@Column(updatable = false)
并使您的设置者私密。(如果你愿意,把你的观众留给公众)
我认为这是最佳做法。
P.S.:如果您为字段添加注释,JPA 将使用字段访问;如果您注释 getter 方法,则使用 getter/setter 访问权限。
Ad. 1:我相信 JPA 使用普通的私有字段进行读取和写入,如果注释放在字段而不是 getter 上。最近我发现Hibernate作为底层JPA提供者甚至根本不需要和方法。这是真正具有启发性的解决方案,因为从一开始我就认为Hibernate需要访问器。所以答案是:就Hibernate而言,你不需要设置器。get*()
set*()
Ad. 2:但是请注意,Hibernate仍然需要no-arg构造函数,否则它将无法加载实体,并出现描述性异常。这也是 JPA 要求。
Ad. 3:不,没有。请记住,您的集合也必须是不可变的。