假設我有一個Person,Building和Address類。一個人可以有很多地址,一個建築物可以有一個地址。在DB中,所有三個都有自己的獨立表格。地址錶鏈接的方式是使用fk_id列和類型列。通過將person_id作爲fk_id和設置類型存儲爲「person」來存儲人的地址,而對於建築物,將building_id存儲爲fk_id並將類型設置爲「building」。有沒有什麼方法可以映射這些關係,或者我需要將數據庫轉換爲使用鏈接表並執行多對多或僅使用HQL來檢索該數據?在休眠狀態下,多個一對多/一對一的關係到同一個班級
0
A
回答
0
找到答案,所需要的就是在集合上添加「where」條件。
0
你可以像這樣映射你的實體。
<class name="Address">
<id name="addressId" column="addressId">
<generator class="native"/>
</id>
</class>
<class name="Person">
<id name="personId" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
unique="true"
class="Address"/>
</set>
</class>
<class name="Building">
<id name="id" column="buildingId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
unique="true"
not-null="true"/>
</class>
你只需要一個額外的表PersonAddress。
+0
不幸的是,這不是我要找的。我知道如何實現我所需要的,如果我更改數據庫結構,但我想知道是否可以使用我描述的模型(地址表具有可映射到address_id或person_id的fk_id字段以及可以映射到被設置爲「person」或「building」 – Rocket04
0
您可以映射此像這樣:
@Entity
public class Address {
@ManyToOne @JoinColumn(name="person_id")
private Person person;
@OneToOne @JoinColumn(name="building_id")
private Building building;
}
@Entity
public class Person {
@OneToMany(mappedBy="person", targetEntity=Address.class)
private Set<Address> addresses;
}
@Entity
public class Building {
@OneToOne(mappedBy="building")
private Address address;
}
在這個例子中,地址可以有任何一個人或一個大廈(它不應該有兩個)。此外,地址被認爲是關係的所有者,人或建築是該關係的「反面」方面。這就是說,要創建對象圖,您仍然可以使用級聯保存(註釋中的「級聯」屬性),以便您可以在內存中創建所有對象,並簡單地保存Person或Building,然後它應該自動保存地址對象以及它。
相關問題
- 1. 在休眠狀態下使用一對多關係
- 2. 休眠:一個一對一的關係有太多的疑問
- 3. 休眠:刪除實體在一個一對多的關係
- 4. 休眠:選擇在一對多關係
- 5. 用於一對多/多對一關係的休眠設置
- 6. 休眠一對多和多對一的關係
- 7. 休眠一對一關係
- 8. 休眠一對一關係
- 9. 兩班同班,一對多關係
- 10. JPA(休眠)一對多的關係,空
- 11. 休眠一對多關係將數據保存到多個表
- 12. 休眠在一個一對多
- 13. 一個一對多的關係休眠錯誤
- 14. 休眠映射 - 多對一關係
- 15. 休眠:無法多對一關係
- 16. 如何在休眠狀態下表示與同一個表/實體的多對多關係?
- 17. 休眠,獲取一個一對多
- 18. 玩! - 在同一個模特班上多對多的關係
- 19. 多對多和一對多的休眠關係
- 20. 休眠findByExample上一個多對多的
- 21. 休眠多對一
- 22. 一對多休眠
- 23. 休眠 - 一對多
- 24. 休眠一對多
- 25. 在休眠狀態下同一張桌面上的一對多映射
- 26. 休眠映射與一對多的多態關係
- 27. 在休眠狀態下以一對多關係從父表中刪除記錄
- 28. 休眠多個多對一映射
- 29. JPA /休眠 - 多態多對一關係設計
- 30. 一個多對多關係
你的建築物與地址有何不同? – Phani
不知道我明白這個問題。該建築是與地址完全不同的實體。 – Rocket04