Java 当没有定义getter/setter方法时,JPA提供者如何访问(私有)字段值?

Java 当没有定义getter/setter方法时,JPA提供者如何访问(私有)字段值?,java,jpa,jpa-2.0,Java,Jpa,Jpa 2.0,当@entity访问模式为“字段”访问时,实体类字段可以标记为私有,只想了解提供者在这种情况下如何访问实体状态,因为字段标记为私有,在类外不可见 编辑#1-如您所知,对于字段访问,getter和setter方法是可选的。所以我想了解当没有提供getter/setter方法时,提供者将如何访问该字段。希望这能澄清我的问题 提供程序可以使用反射来访问类实例上的私有字段 提供程序可以使用反射来访问类实例上的私有字段 参考第2.2节(第24页)中的官方版本(最终版本,JPA 2.1),我们发现: 实体的

@entity
访问模式为“字段”访问时,实体类字段可以标记为
私有
,只想了解提供者在这种情况下如何访问实体状态,因为字段标记为私有,在类外不可见


编辑#1-如您所知,对于字段访问,getter和setter方法是可选的。所以我想了解当没有提供getter/setter方法时,提供者将如何访问该字段。希望这能澄清我的问题

提供程序可以使用反射来访问类实例上的私有字段

提供程序可以使用反射来访问类实例上的私有字段

参考第2.2节(第24页)中的官方版本(最终版本,JPA 2.1),我们发现:

实体的持久状态由持久性提供程序运行时通过JavaBeans访问 样式属性访问器(“属性访问”)或通过实例变量(“字段访问”)。是否持久 属性或持久字段或两者的组合用于提供者访问 给定的类或实体层次结构如第2.3节“访问类型”所述确定

在第2.3.1节(第27页)中,该定义更加具体-关于您的问题:

默认情况下,单个访问类型(字段或属性访问)应用于实体层次结构。默认值 实体层次结构的访问类型由映射注释在 实体层次结构的实体类和映射超类的属性,这些属性不显式 指定访问类型。[……]

•使用基于字段的访问时,实体类的对象/关系映射注释 注释实例变量,持久性提供程序运行时将访问实例变量 直接。所有未使用瞬态注释的非瞬态实例变量 注释是持久的

•使用基于属性的访问时,实体的对象/关系映射注释 类注释getter属性访问器,持久性提供程序运行时通过属性访问器方法访问持久性状态。所有未使用
Transient
注释注释的属性都是持久的

术语直接指的是一种访问策略,它允许在不需要使用getter/setter方法的情况下操纵对象的字段(值)。在Java中,对于大多数OR映射程序(至少是我所知道的那些),这是通过使用实现的。通过这种方式,可以检查类的字段并对其进行操作,以保存/表示来自(关系)数据库条目(即它们各自的列)的数据值

例如,提供程序Hibernate在其

2.5.9。访问策略

作为JPA提供者,Hibernate可以内省这两个实体属性 (实例字段)或访问器(实例属性)。默认情况下, @Id注释的位置提供了默认的访问策略

重要提示:

在尝试不同的访问策略时要小心!必须满足以下要求(JPA规范,第28页):

实体层次结构中访问类型以这种方式默认的所有此类类在 它们在字段或属性上放置注释,这样一个单一的、一致的默认访问 类型应用于层次结构中

希望有帮助。

参考第2.2节(第24页)中的官方版本(最终版本,JPA 2.1),我们发现:

实体的持久状态由持久性提供程序运行时通过JavaBeans访问 样式属性访问器(“属性访问”)或通过实例变量(“字段访问”)。是否持久 属性或持久字段或两者的组合用于提供者访问 给定的类或实体层次结构如第2.3节“访问类型”所述确定

在第2.3.1节(第27页)中,该定义更加具体-关于您的问题:

默认情况下,单个访问类型(字段或属性访问)应用于实体层次结构。默认值 实体层次结构的访问类型由映射注释在 实体层次结构的实体类和映射超类的属性,这些属性不显式 指定访问类型。[……]

•使用基于字段的访问时,实体类的对象/关系映射注释 注释实例变量,持久性提供程序运行时将访问实例变量 直接。所有未使用瞬态注释的非瞬态实例变量 注释是持久的

•使用基于属性的访问时,实体的对象/关系映射注释 类注释getter属性访问器,持久性提供程序运行时通过属性访问器方法访问持久性状态。所有未使用
Transient
注释注释的属性都是持久的

术语直接指的是一种访问策略,它允许在不需要使用getter/setter方法的情况下操纵对象的字段(值)。在Java中,对于大多数OR映射程序(至少是我所知道的那些),这是通过使用实现的。通过这种方式,可以检查类的字段并对其进行操作,以保存/表示来自(关系)数据库条目(即它们各自的列)的数据值

例如,提供程序Hibernate在其

2.5.9。访问策略