JPA:什么是默认的accessType FIELD或PROPERTY?

时间:2017-09-09 17:09:06

标签: jpa

JPA:什么是默认的accessType FIELD或PROPERTY?

public class Foo {
   @Column(length=10)
   public String name;

   //@Column(length=10)
   public String getName() {
   }
}

在文档中没有提到。

1 个答案:

答案 0 :(得分:1)

官方规范

http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf

2.3.1默认访问类型第23页

默认情况下,单个访问类型(字段或属性访问)适用于实体层次结构。实体层次结构的默认访问类型由映射注释放置在实体类的属性和未明确实体层次结构的映射超类中确定 指定访问类型。

通过Access注释[6]显式指定访问类型 ,如第2.3.2节所述。

2.3.2 显式访问类型 可以为该类指定单个实体类,映射超类或可嵌入类的访问类型,而与默认类无关 通过应用于类的Access注释实现实体层次结构。此显式访问类型规范不会影响实体层次结构中其他实体类或映射超类的访问类型。以下规则适用: • 当Access(FIELD)应用于实体类,映射的超类或可嵌入类时,映射注释可以放在该类的实例变量上,持久性提供程序运行时通过类定义的实例变量访问持久状态。所有未使用Transient注释注释的非瞬态实例变量都是持久的。

当Access(FIELD)应用于这样的类时,可以 选择性地指定个别属性 在课堂上进行财产访问。指定一个 持久性提供程序运行时访问的持久属性,该属性必须设置为 经过NAT 访问(PROPERTY) 。 [8]  如果放置了映射注释,则行为未定义 在类定义的任何属性上 未指定访问(PROPERTY)。从超类继承的持久状态是根据访问类型访问的 那些超级班。

结论: 字段或getter上的第一个注释确定整个实体的访问权限。

当使用Access(PROPERTY)时......规则变为

@Access(value=AccessType.FIELD)
@Entity(name="STUDENT")
public class Student { 
 ... all mus be annotated on FIELD

}