孫衛琴的《精通JPA與Hibernate》讀書筆記:@Access註解設定Hibernate訪問類的屬性的方式

在這裏插入圖片描述

持久化層訪問持久化類的屬性主要有兩種方式:
(1) property訪問方式:代表Hibernate經過相應的setXXX()和getXXX()方法來訪問類的屬性。這是優先推薦的方式,爲持久化類的每一個屬性提供setXXX()和getXXX()方法,能夠更靈活地封裝持久化類,提升域模型的透明性。
(2) field訪問方式:代表Hibernate直接訪問類的屬性。
在持久化類中,能夠經過@Access註解來設定Hibernate訪問持久化類的屬性的方式,例如:markdown

//設定property訪問方式
@Access(AccessType.PROPERTY)
public class Customer implements Serializable {……}

或者:ide

//設定field訪問方式
@Access(AccessType.FIELD)
public class Customer implements Serializable {……}

使用@Access註解要遵循如下語法規則。
(1)對於field訪問方式,映射持久化類的全部屬性的註解都位於持久化類的屬性前面,例如:this

@Type(type="text")  //註解位於屬性前面
private char description;

(2)對於property訪問方式,映射持久化類的全部屬性的註解都位於持久化類的getXXX()方法前面,例如:atom

@Type(type="text")   //註解位於getXXX()方法前面
public String getDescription(){
  return this.description;
}

(3)假如Customer類前面沒有使用@Access註解,而且映射Customer類的全部屬性的註解都位於Customer類的屬性前面,在這種狀況下,默認採用field訪問方式。
(4)假如Customer類前面沒有使用@Access註解,而且映射Customer類的全部屬性的註解都位於Customer類的getXXX()方法前面,在這種狀況下,默認採用property訪問方式。
(5)假如Customer類的大部分屬性採用property訪問方式,而個別屬性採用field訪問方式,那麼能夠對Customer類採用@Access(AccessType.PROPERTY)註解,對個別屬性採用@Access(AccessType.FIELD)註解。在這種狀況下,全部的映射Customer類的屬性的註解位於getXXX()方法前,例如:code

@Access(AccessType.PROPERTY)
public class Customer implements Serializable {
  @Column(name="SEX")
  public char getSex(){return sex;}  //sex屬性採用property訪問方式

  @Type(type="text")
  @Access(AccessType.FIELD)
  public String getDescription(){ //description屬性採用field訪問方式
    return description;
  } 
  ……
}

(6)假如Customer類的大部分屬性採用field方式,而個別屬性採用property方式,那麼能夠對Customer類採用@Access(AccessType.FIELD)註解,對個別屬性採用@Access(AccessType.PROPERTY)註解。在這種狀況下,全部的映射持久化類的屬性的註解位於屬性前,例如:blog

@Access(AccessType.FIELD)
public class Customer implements Serializable {
  @Column(name="SEX")
  private char sex;  //sex屬性採用field訪問方式

  @Type(type="text")
  @Access(AccessType.PROPERTY)  
  private String description;  //description屬性採用property訪問方式
  ……
}
相關文章
相關標籤/搜索