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

2023-12-07

我试图弄清楚直接注释(以 @id 为例)getter 方法和相关字段之间是否存在差异,如果我注释该字段,JPA 是否使用某种反射来调用相应的 getter? 因为在我的例子中,我试图混淆我的实体类,所以我正在寻找一种保留业务逻辑的方法,因为 getters 将被重命名为类似 aaa() 的东西。


JPA2 规范第 2.3.1 节的内容如下:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注解字段与其 getter 方法 JPA 之间的区别 的相关文章

随机推荐