JPA規範中能夠經過@Access註解的來指定實體類的訪問策略。app
/** * Used to specify an access type to be applied to an entity class, * mapped superclass, or embeddable class, or to a specific attribute * of such a class. * * @since Java Persistence 2.0 */ @Target( { TYPE, METHOD, FIELD }) @Retention(RUNTIME) public @interface Access { /** * (Required) Specification of field- or property-based access. */ AccessType value(); }
@Access註解中能夠接收兩種AccessType類型的值:AccessType.FIELD和AccessType.PROPERTY。ui
AccessType.FIELD指經過類中的字段來獲取對應的表字段信息。此時,JPA只關注類中的字段名,並轉換爲對應的表字段信息,而不會讀取getter方法和setter方法上的表字段註解信息。如:this
@Entity @Table(name="t_user") @Access(AccessType.FIELD) public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; @Column(name="name", length=30) private String name; @Column(name="age", nullable=false) private int age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
AccessType.PROPERTY指經過類中的getter方法和setter方法來獲取對應的表字段信息。此時,JPA只關注類中getter方法和setter方法上的表字段註解信息,並轉換爲對應的表字段信息。如:code
@Entity @Table(name="t_cat") @Access(AccessType.PROPERTY) public class Cat implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String name; @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name="name", length=30) public String getName() { return name; } public void setName(String name) { this.name = name; } }
JPA的關聯規則能夠根據喜愛而任選其一進行配置使用,在對應生成表字段信息時沒有區別。從@Access註解的@Target配置信息中可知其能夠配置在類,字段或方法上。以此來知足不一樣場景下表字段信息的掃描規則需求。如:ci
@Entity @Table(name="t_employee") @Access(AccessType.FIELD) public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Access(AccessType.PROPERTY) @Column(name="name", length=30) public String getName() { return name; } public void setName(String name) { this.name = name; } }
在默認狀況下,JPA會自動識別@Id註解的配置方式,並以此來選擇對應的表字段信息的掃描規則。get