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



我试图弄清楚注释(让我们以@id为例)getter方法和相关字段之间是否有区别,如果我注释字段,JPA是否使用某种反射来调用相应的getter?因为就我而言,我试图混淆我的实体类,所以我正在寻找一种保留业务逻辑的方法,因为 getter 将被重命名为 aaa() 之类的东西。

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

默认情况下,单个访问类型(字段或属性访问权限)适用于 实体层次结构。实体层次结构的默认访问类型为 由映射注释在属性上的位置决定 实体层次结构的实体类和映射的超类 未显式指定访问类型。访问类型为 通过 Access 注释[6] 显式指定,作为 在第 2.3.2 节中描述。当使用批注来定义 默认访问类型,映射注释的位置 实体的持久字段或持久属性 类将访问类型指定为字段或 分别基于属性的访问。

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

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

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

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

最新更新