anotating一个字段和它的getter方法JPA之间的区别

Gen*_*uro 3 obfuscation annotations jpa

我正在努力思考羯羊有betweeen anotating(让我们@id为例)getter方法和直接有关领域有所作为,如果我注释字段,并JPA使用某种反射到invok相应的getter?因为在我的情况下我试图模糊我的实体类,所以我正在寻找一种方法来保持业务逻辑,因为getter将被重命名为类似aaa()的东西.

JB *_*zet 7

以下是JPA2规范的2.3.1部分所说的内容:

默认情况下,单个访问类型(字段或属性访问)适用于实体层次结构.实体层次结构的默认访问类型由映射注释放置在实体类的属性和未明确指定访问类型的实体层次结构的映射超类中确定.通过Access注释[6]显式指定访问类型,如2.3.2节所述.当注释用于定义默认访问类型时,映射注释在实体类的持久字段或持久属性上的放置将访问类型分别指定为基于字段或基于属性的访问.

  • 当使用基于字段的访问时,实体类的对象/关系映射注释会注释实例变量,持久性提供程序运行时直接访问实例变量.所有未使用Transient注释注释的非瞬态实例变量都是持久的.
  • 当使用基于属性的访问时,实体类的对象/关系映射注释注释getter属性访问器[7],持久性提供者运行时通过属性访问器方法访问持久状态.未使用Transient注释注释的所有属性都是持久的.
  • 映射注释不得应用于瞬态或瞬态的字段或属性.

以这种方式默认访问类型的实体层次结构中的所有此类必须在它们在任一字段或属性上的注释放置中保持一致,以便在层次结构中应用单个一致的默认访问类型.除非按照以下定义指定Access注释,否则此类使用的任何可嵌入类将具有与层次结构的默认访问类型相同的访问类型.如果无法确定默认访问类型并且未通过注释或XML描述符显式指定访问类型,则会出错.在未明确指定Access注释的情况下,混合在实体层次结构中的字段和属性上放置注释的应用程序的行为是未定义的.

因此,如果您想避免混淆问题,请一致地注释字段而不是getter,或使用@Access批注强制字段访问类型.


Pra*_*att 6

JPA允许对持久类的数据进行两种类型的访问.字段访问意味着它将实例变量(字段)映射到数据库中的列和Property访问,这意味着它使用getter来确定将映射到db的属性名称.它将使用的访问类型取决于您放置@Id注释的位置(在id字段或getId()方法上).