jpa 实体映射视图_JPA教程:实体映射-第3部分
jpa 實體映射視圖
在上一篇文章中,我展示了兩種讀取/寫入持久實體狀態的不同方法-字段和屬性。 使用字段訪問模式時,JPA使用反射直接從實體的字段讀取狀態值。 如果我們沒有明確指定列名,它將直接將字段名轉換為數據庫列名。 在屬性訪問模式下,getter / setter方法用于讀取/寫入狀態值。 在這種情況下,我們使用相同的注釋來注釋實體狀態的getter方法,而不是字段。 如果我們未明確指定數據庫列名稱,則按照JavaBean約定確定它們,即通過從getter方法名稱中刪除“ get”部分并將方法名稱其余部分的首字母轉換為小寫字符來確定。
我們可以通過在實體類聲明中使用@Access注釋來指定用于實體的訪問方式。 此注釋采用AccessType類型的參數(在javax.persistence包中定義)枚舉,該參數具有對應于兩種不同訪問模式( FIELD和PROPERTY )的兩個不同值。 例如,我們可以通過以下方式為Address實體指定屬性訪問模式:
關于上述示例的幾點注意事項:
如果一個實體沒有顯式的訪問模式信息,就像我們在本系列第一部分中創建的Address實體一樣,那么JPA會采用默認的訪問模式。 這個假設不是隨機的。 相反,JPA首先嘗試找出@Id批注的位置。 如果在字段上使用@Id批注,則假定為字段訪問模式。 如果在getter方法上使用@Id批注,則假定為屬性訪問模式。 因此,即使在上例中從地址實體中刪除@Access批注,映射仍將有效,并且JPA將采用屬性訪問模式:
@Entity @Table(name = "tbl_address") public class Address {private Integer id;private String street;private String city;private String province;private String country;private String postcode;private String transientColumn;@Id@GeneratedValue@Column(name = "address_id")public Integer getId() {return id;}// Rest of the class........有關訪問模式,需要記住的一些重要要點:
也可以將這兩種訪問類型混合使用。 假設您要對實體的除一種狀態外的所有狀態都使用字段訪問模式,對于其余一種狀態,您想使用屬性訪問模式,因為您想在向/從狀態值讀取/寫入狀態值之前執行某種轉換。數據庫。 您可以按照以下步驟輕松完成此操作:
下面的示例演示了這種方法,因為將郵政編碼更改為使用屬性訪問模式:
@Entity @Table(name = "tbl_address") @Access(AccessType.FIELD) public class Address {@Id@GeneratedValue@Column(name = "address_id")private Integer id;private String street;private String city;private String province;private String country;/*** postcode is now marked as Transient*/@Transientprivate String postcode;@Transientprivate String transientColumn;public Integer getId() {return id;}public Address setId(Integer id) {this.id = id;return this;}public String getStreet() {return street;}public Address setStreet(String street) {this.street = street;return this;}public String getCity() {return city;}public Address setCity(String city) {this.city = city;return this;}public String getProvince() {return province;}public Address setProvince(String province) {this.province = province;return this;}public String getCountry() {return country;}public Address setCountry(String country) {this.country = country;return this;}/*** We are now using property access mode for reading/writing* postcode*/@Access(AccessType.PROPERTY)public String getPostcode() {return postcode;}public Address setPostcode(String postcode) {this.postcode = postcode;return this;} }這里要注意的重要一點是,如果我們不使用@Access注釋對類進行注釋,以將字段訪問模式顯式指定為默認模式,而是對字段和getter方法進行注釋,則映射的結果行為將是不確定的。 這意味著結果將完全取決于持久性提供程序,即一個提供程序可能選擇使用字段訪問模式作為默認值,一個提供程序可能使用屬性訪問模式,或者一個可能決定引發異常!
今天就這樣。 如果您發現任何問題/有任何疑問,請隨時發表評論!
直到下一次。
翻譯自: https://www.javacodegeeks.com/2014/10/jpa-tutorial-mapping-entities-part-3.html
jpa 實體映射視圖
總結
以上是生活随笔為你收集整理的jpa 实体映射视图_JPA教程:实体映射-第3部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (免费手机游戏下载安卓)
- 下一篇: 新版本的Selenium 4 Alpha