Hibernate / JPA中可能有不可变的字段吗?

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

起初,我们想到封装领域并使制定者保密。 但是,一些问题引起了:

  • 如果没有公共setter,Hibernate是否仍然能够映射数据库中的字段?
  • 我可以去掉setter并只在实体构造函数中使字段可变吗?
  • 最后,有没有标准的JPA方法可以使字段不可变?
  • 提前致谢。


  • 广告。 1:如果注释放在字段而不是getter上,我相信JPA使用纯专用字段进行读写。 最近我发现Hibernate作为底层的JPA提供者甚至不需要get*()set*()方法。 这是从一开始我就认为Hibernate需要访问者的真正有启发性的解决方案。 所以答案是:就Hibernate而言, 您不需要setter

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

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


  • 尝试

    @Column(updatable = false)
    

    并让你的二传私人。 (如果你想要让你的吸气器公开)

    我认为这是最佳做法。

    PS:JPA使用字段访问,如果你注释你的字段,并使用getter / setter访问,如果你注释你的getter方法。


    在JPA 2.0中,您有两种方法来定义应该保留哪些属性:

  • 访问(FIELD) - 字段名称被保留,
  • 访问(PROPERTY) - 属性名称被保留。
  • 如果没有使用Access( - )注解,决定使用什么访问取决于你放置@Id注释的地方。 如果你把它放在你的字段旁边 - 将使用Access(FIELD)。 如果你把它放在你的访问器旁边 - 将使用Access(PROPERTY)。

    因此,如果使用Access(FIELD),则不必为特定字段提供适当的JavaBeans样式访问器。 您可以拥有一个名为'myField'的私人字段和一个名为'public setBlahBlah( - )'的公开setter。 JPA将坚持只有'myField'。

    链接地址: http://www.djcxy.com/p/37005.html

    上一篇: Is it possible to have immutable fields in Hibernate/JPA?

    下一篇: To equals and hashcode or not on entity classes, that is the question