我应该在哪里应用JPA注释,getter或字段?

时间:2011-09-19 00:21:57

标签: java jpa annotations

我是JPA的初学者,我实际上是在尝试学习这个API的基础知识,我的问题是;将注释应用于字段并将其应用于其getter是否有区别?

2 个答案:

答案 0 :(得分:3)

我没有一个好的JPA参考,但是如果你正在使用Hibernate,那么在the Hibernate Annotations reference中有一些关于这个选择的注释。它说:

  

根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。 EJB3规范要求您在将要访问的元素类型上声明注释,即如果使用属性访问则使用getter方法,如果使用字段访问,则为字段。应避免在两个字段和方法中混合注释。 Hibernate将从@Id或@EmbeddedId的位置猜测访问类型。

Hibernate使用反射来访问值,这个选择将决定它是调用getter和setter还是使用直接字段访问。

哪种选择实际上更好是值得商榷的,可能会有所不同,具体取决于你是否做了超出明显获取和设置你的getter和setter中字段的工作。

答案 1 :(得分:2)

其他人声明,Field和Property访问权限之间存在差异。字段表示持久性提供程序的直接访问,而Property(方法访问)表示使用您选择的getter / setter来访问数据。

我建议从Field访问开始,因为根据我的经验,这对新用户来说更容易/更安全。属性访问可能非常有用,并且可能通常是某些人更喜欢,但如果你不小心(由于getter和setter可能具有的额外行为),它也可能导致问题。因此,除非您有理由使用Property访问,否则最好将Field访问作为初学者使用。

如果您刚刚开始使用JPA,我还建议您选择Mike Keith和Merrick Schincariol的Pro JPA 2副本。它涵盖了这个和许多其他相关主题。