我沒有太多的數據庫設計經驗,我嘗試使用像休眠一樣的ORM來理解它背後的一般邏輯。我有兩個用戶和語言表。用戶可以知道一種或多種語言,因此兩個表之間存在一對多關係。但是我有固定的語言版本,例如英語,西班牙語和法語。據我瞭解,每個新的用戶實例持續存在,語言表中將有重複的條目與該人的外鍵。有沒有辦法阻止這個重複的條目?休眠一對多映射固定值
0
A
回答
0
你的理解有點困惑。您可以使用Foreign Key
來映射OneToMany
關係,並且有充足的數據庫原因可以這樣做,但通常是a JPA provider recommends against it。但是,您正在描述ManyToMany
關係。 A User
將(或可能)有許多Languages
。 A Language
將有很多Users
。當您創建許多與註釋一對多的關係:
@Entity
public class Person {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToMany
private List<Language> languages;
和
@Entity
public class Language {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
JPA提供者將創建一個協會或Join Table
,從每個Entity
在它的ID:
create table Person_Language (Person_id bigint not null, languages_id bigint not null)
當你創建一種語言時,一個條目將被放入語言表中。當你創建一個用戶時,一個條目將被放入用戶表中。當您將語言添加到某個人的languages
時,則會將一個條目放入Join Table
。
insert into Person_Language (Person_id, languages_id) values (?, ?)
會有在連接表的Person_id
和languages_id
只有獨特的組合,因此該數據庫將很好正常化。由於您指出的原因,您將無法使用Language
實體中的Foreign Key
將語言指定給多個用戶:對於任何給定的語言,只會有一個外鍵列。
相關問題
- 1. 休眠多對一映射
- 2. 一對多映射休眠
- 3. 休眠多對多映射
- 4. 休眠多個多對一映射
- 5. 休眠映射一對一
- 6. 休眠一對一映射
- 7. 休眠一對一映射
- 8. 休眠一對多映射錯誤
- 9. 休眠映射 - 多對一關係
- 10. 休眠:多對一映射兩個表
- 11. 休眠外鍵映射多對一
- 12. 休眠一對多單向映射表
- 13. 休眠設計多對一映射
- 14. 休眠映射多對一條件
- 15. 休眠映射:在休眠時刪除一對多的雙向映射
- 16. 休眠:多對多的映射異常
- 17. 休眠多對多單向映射
- 18. 休眠映射xml多對多數組
- 19. 休眠一一對一映射問題
- 20. 休眠 - 一個休眠映射
- 21. 休眠多模式映射
- 22. 休眠映射
- 23. 休眠映射
- 24. 休眠映射
- 25. 休眠NULL值(XML映射)
- 26. 休眠映射可選值
- 27. 休眠:多家長對孩子映射
- 28. 休眠映射對象
- 29. 關於一對一映射休眠
- 30. 休眠映射問題 - 一對一