在類聲明之前添加每一個@entity和@embeddable註解之間的區別?@Entity和@embeddable之間有什麼區別
- 第一個創建類作爲實體,第二個插入列從另一個表?
- 第一個創建類作爲表,第二個嵌入另一個類?
- 第一組標準爲一類,第二限定表型
- 第一創建表該類,第二嵌入的東西分成不同的類
- 兩個表的第一限定表屬性,第二創建聯合
在類聲明之前添加每一個@entity和@embeddable註解之間的區別?@Entity和@embeddable之間有什麼區別
@Entity
一個類的註解定義了它,它有一個獨特的單獨的存在。因此,我們可以運行數據庫查詢,而不依賴於任何其他類。 @Embeddable
一個類的註解定義了它沒有獨立存在。因此,我們不能運行數據庫查詢,而不依賴於其他類。下面是一個例子,以更好地理解它:
@Entity
User
-- long id
-- String name
-- String email
@Embedded
-- UserDetails userDetail
@Embeddable
UserDetails
-- Date dateOfBirth
-- String sex
-- String address
-- String maritalStatus
在這裏你可以看到,而不必一個User
,UserDetails
是沒用的。
通常,在OOP中,我們首先設計類,然後設計數據庫實體。對於某些類(如上例中的UserDetails類),我們不希望在DB中擁有單獨的表,其獨立存在是無意義的。在這些情況下,我們將該類標記爲可嵌入的。
通常,嵌入類共享同一個表作爲在它們被嵌入
實體擁有身份和可被查詢的實體。 Embeddables沒有自己的身份,只能使用擁有實體進行查詢。
如果您打開一個實體類,您將始終找到@Id
註釋 - 這是強制性的。如果您打開一個嵌入式課程,您將永遠找不到@Id
註釋 - 這是禁止的。
編輯:這是不完全正確的,可嵌入只能存儲爲父,即在同一個表中的一部分。這僅適用於一對一的關係。您可以在父實體中嵌入對象的Collections
和Maps
,它們將映射到自己的收集表。
實體類是一個普通的用戶定義的Java類,它的實例可以存儲在數據庫中。
@Entity
@Table(name="dog")
public class Dog{
@Id
@Column(name = "id")
private int id;
@Embedded
private Animal animal;
public Dog(int id,Animal animal){
this.id=id;
this.animal=animal;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
}
可嵌入的類是用戶定義的可持久化類,用作值類型。與其他非實體類型一樣,可嵌入類的實例只能作爲嵌入對象存儲在數據庫中,即作爲包含實體對象的一部分。
@Embeddable
public class Animal {
@Column(name = "name")
private String name;
@Column(name = "location")
private String location;
public Animal(){
}
public Animal(String name,String location){
this.name=name;
this.location=location;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
這是一個老話題,但我想補充我的答案,這更多的是從理論的角度。在DDD(域驅動設計)中,我們通常有Entity
和Value Objects
。第一個只能通過他們擁有的identity
來識別。第二個不是由身份定義的,這意味着如果所有組成該特定對象的組件都是相同的,那麼2個值對象是相同的。
的比喻是,在這種情況下,如果我們採用DDD的Entity
是@Entity
註釋的類和Value Object
是一個與@Embeddable
。這是一個事實,即可嵌入對象作爲附加信息添加到現有記錄中,該記錄已經在嵌入對象的外部定義了its own identity
。
可嵌入組件可以擁有自己的數據庫表,以防您將它們用作包,集合,列表和映射(1個實體具有多個可嵌入組件實例時的一對多關係)集合的一部分。 – Aladin