在Java中可以註釋類爲@Embeddable
或將屬性設置爲@Embedded
。示例代碼:何時使用@Embedded和@Embeddable?
@Embeddable
class A{
...
}
class B{
...
}
@Entity
class Foo {
A a;
@Embedded B b;
}
當喜歡@Embedded
和@Embeddable
?
在Java中可以註釋類爲@Embeddable
或將屬性設置爲@Embedded
。示例代碼:何時使用@Embedded和@Embeddable?
@Embeddable
class A{
...
}
class B{
...
}
@Entity
class Foo {
A a;
@Embedded B b;
}
當喜歡@Embedded
和@Embeddable
?
這兩者都處於休眠使用註釋:
用於組合主鍵@Embeddable使用。
@Embedded實體與父實體合併在一起,就好像它們在那裏一直被聲明一樣。有時候,你有一個包含多列的巨大表(特別是對於遺留數據庫)。然而,有些列在邏輯上彼此相關(如CUSTOMER表中的街道,城市和電話號碼)。如果您不想使用所有字段創建對象,則可以創建嵌入式地址對象。通過這種方式,您可以將地址列邏輯分組爲一個對象,而不是將同樣龐大的POJO與一組平坦的字段列表組合在一起。
如果我們有人和地址兩個POJO,您不想爲地址創建另一個表,但是您希望將該地址嵌入到人員表中。所以地址是爲Person對象添加值,但沒有任何意義。在這種情況下,我們可以一起去:
@Embeddable
public class Address{
}
@Entity
public class Person
{
@Embedded
private Address address;
}
有用於@Embedded
/@Embeddable
兩個主要用途,據我所知:
首先,也是最重要的:拆分大型實體類。在數據庫世界中,一個很大的表(很多列)是很好的。打破這樣的表格甚至會使事情變得更糟,並且與數據庫設計原則相沖突。另一方面,在Java(或一般的面向對象的語言)中,大類是code smell
。在這裏,我們想將包括實體類在內的類拆分成更小的單元。 @Embedded
/@Embeddable
允許我們輕鬆地做到這一點,而不必拆分數據庫表。其次,它允許重用實體之間的通用映射。假設每個表都有一個簡單的修訂追蹤,其中兩列包含更改行的人的用戶名以及發生的時間。然後,我們可以創建一個覆蓋這些行的實體,然後通過嵌入它來重複使用它(而不是重複每個實體中與這些列對應的變量)。
您是否諮詢了這些註釋的Javadoc? – wero