是否可以在Hibernate/JPA中使用不可变字段?

EdM*_*elo 18 java hibernate immutability jpa-2.0

在我们的应用程序中,我们需要只能分配一次的字段.

起初我们考虑封装字段并使setter私有化.但是,有些问题会引起:

  • 如果没有公共设置器,Hibernate是否仍能从数据库中映射字段?
  • 我可以剥离setter并仅在实体构造函数中使字段可变吗?
  • 最后,是否有任何标准的JPA方法使字段不可变?

提前致谢.

Tom*_*icz 15

  • 广告.1:我认为如果注释放在字段上而不是放在getter上,JPA会使用普通的私有字段进行读取和写入.最近我发现Hibernate作为底层JPA提供者根本不需要get*()set*()方法.这是一个真正具有启发性的解决方案,因为从一开始我认为Hibernate需要访问器.所以答案是:就Hibernate而言,你不需要setter.

  • 广告.2:但是请注意,Hibernate仍然需要no-arg构造函数,否则它将无法加载具有描述性异常的实体.这也是JPA的要求.

  • 广告.3:不,没有.请记住,您的收藏品也必须是不可变的.


小智 11

尝试

@Column(updatable = false)
Run Code Online (Sandbox Code Playgroud)

并使你的二传手私人.(如果你愿意,可以公开你的获取者)

我认为这是最好的做法.

PS:如果您注释字段,JPA使用字段访问,如果您注释getter方法,则使用getter/setter访问权限.