嗯,不同之處在於您嘗試使用對象反映的設計。
在你的情況下,每個Question
可以分配到多個Categories
- 所以這是一個@*ToMany
關係的標誌。現在,你必須決定是否:
- 每個
Category
只能有一個Question
分配給它(這將導致獨特約束,這意味着沒有其他的分類可參照同樣的問題) - 這將是@OneToMany
的關係,
- 每個
Category
可以有多個Questions
分配給它(在Category
表中將沒有唯一約束) - 這將是@ManyToMany
的關係。
@OneToMany(問題 - >類)
這種關係可以通過連接表只有當你明確地定義,以便使用@JoinTable
或表示當它是一個單向關係,其中擁有方是「一方」(這意味着在Question
實體中您有一個Categories
的集合,但在Categories
中,您沒有任何對Question
的引用)。
如果你考慮一下,使用連接表看起來相當合理。 DBMS沒有其他方式可以將Question
表中的一行與Categories
表中的多行保存連接。
但是,如果您想建立雙向關係模型,則需要指定Category
('多邊')是關係的主角。在這種情況下,DBMS可以在Category
表中使用外鍵創建連接列,因爲每個Category
行只能連接一個Question
。
通過這種方式,您不需要任何連接表,只需使用簡單的外鍵(仍然可以像開頭指出的那樣,使用@JoinTable
強制創建連接表)。
@ManyToMany
這種關係必須被表示爲連接表。它基本上與單向@OneToMany
關係非常相似,但在這種情況下,您可能會有多行從Question
連接到Categories
的多行。
非常好的解釋。應該有更多的upvotes。 – LppEdd