JPA @Embeddable和@Embedded
介紹:
作為一個面向對象的開發(fā)人員,我們希望避免使用帶有大量不相關字段的大型類。 因此,我們可能經(jīng)常感到有必要使用多個對象來表示JPA實體。
在本快速教程中,我們將學習如何使用JPA或Hibernate中的@Embedded和@Embeddable注釋來實現(xiàn)它。
上下文構建:
假設我們有一個人桌 ? 具有以下列:
id|firstName|middleName|lastName|street|city|country|pincode我們希望將其映射為JPA實體。
在我們的實體類中直接映射這么多屬性對于我們開發(fā)人員的本能并不那么自然。 同樣,更改數(shù)據(jù)庫表結構也不可行。 我們做什么?
首先定義一個PersonName和Address類:
@Embeddable public class PersonName { ?private String firstName; private String middleName; private String lastName; ?//constructors, getters, setters ... } ? @Embeddable public class Address { private String street; private String city; private String country; private String pincode; ?//constructors, getters, setters ... }我們已經(jīng)使用@Embeddable批注標記了這兩者,以表示它們將被嵌入到JPA實體中。
最后,我們將使用@Embedded注釋嵌入特定類型。
讓我們來定義將代表我們的人表我們的Person實體:
@Entity public class Person { ????@Id @GeneratedValue private Integer id; ????@Embedded private PersonName name; ?@Embedded private Address address; ?//constructor, getters, setters ... }我們在這里使用@Embedded批注來表示這些對象將被嵌入到我們的實體中。 換句話說, 所有這些對象將一起映射到一個人數(shù)據(jù)庫表。
覆蓋屬性:
當我們有多個實體使用可嵌入對象時,可嵌入對象通常特別方便。
現(xiàn)在讓我們說,我們還有另一個表– office :
id|streetAddr|city|country|postcode|...office表還具有一個Address類型,只是幾個字段名稱有所不同。
同樣,在這里,我們可以使用相同的Address可嵌入對象。 這個想法是使用@AttributeOverrides和@AttributeOverride注解覆蓋Address類的street和pincode屬性 :
@Entity public class Office { ????@Id @GeneratedValue private Integer id; ?@Embedded @AttributeOverrides (value = { @AttributeOverride (name = "street" , column = @Column (name = "streetAddr" )), @AttributeOverride (name = "pincode" @AttributeOverride "pincode" , column = @Column , column = (name = "postcode" )) }) private Address address; ... }這種方法更加簡潔,使我們避免在多個實體之間重復使用名稱重復的重復字段。
相反,我們可以覆蓋可嵌入類型的任何列屬性。
結論:
在本教程中,我們探討了JPA @Emdeddable和@Embedded注解。
成為第一個發(fā)表評論的人。
翻譯自: https://www.javacodegeeks.com/2020/01/jpa-embeddable-and-embedded.html
總結
以上是生活随笔為你收集整理的JPA @Embeddable和@Embedded的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvm虚拟机 基于栈_守护基于JVM的应
- 下一篇: 只需一部手机或一台电脑皆可操作一台电脑怎