注释字段与其getter方法JPA之间的区别

时间:2012-04-17 09:33:43

标签: jpa annotations obfuscation

我想弄清楚是否有一个区别在于anotating(让我们以@id为例)一个getter方法和直接相关的字段,如果我注释该字段,JPA是否使用某种反射来调用相应的吸气剂? 因为在我的情况下我试图模糊我的实体类,所以我正在寻找一种方法来保持业务逻辑,因为getter将被重命名为aaa()。

2 个答案:

答案 0 :(得分:7)

以下是JPA2规范第2.3.1节所说的内容:

  

默认情况下,单一访问类型(字段或属性访问)适用   实体层次结构。实体层次结构的默认访问类型是   通过在属性上放置映射注释来确定   实体类和实体层次结构的映射超类   没有明确指定访问类型。访问类型是   通过Access注释[6]明确指定,如   在2.3.2节中描述。当注释用于定义a   默认访问类型,映射注释的位置   持久字段或实体的持久属性   class将访问类型指定为field-或   基于财产的访问。

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

访问类型为的实体层次结构中的所有此类   以这种方式违约必须保持一致   对字段或属性的注释,例如单个,   一致的默认访问类型适用于层次结构。任何   这些类使用的可嵌入类将具有相同的访问类型   作为层次结构的默认访问类型,除非Access   注释指定如下定义。如果是默认值,则会出错   无法确定访问类型,并且未明确访问类型   通过注释或XML描述符指定。行为   混合注释放置在字段和的字符串的应用程序   实体层次结构中的属性,没有明确指定   Access注释未定义。

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

答案 1 :(得分:6)

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