持久化層訪問持久化類的屬性主要有兩種方式:
(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訪問方式 …… }