簡體   English   中英

JPA:建模m:n關系和聯接表值

[英]JPA: Modelling m:n relationship & join-table values

在某些實體(例如,用戶<--->組)之間具有真實關系,現在我想對此關系建模並基於該關系存儲其他信息,例如字段“ quality”。

我聽說我將必須創建一個新的聯接表user_group,如下所示:

id | user_ref | group_ref | quality
----------------------------------
1      1           1         0.5
2      1           2         1.3
...    ...         ...        ...

對應的實體具有兩個相關的實體(私有成員)用戶和組,並用@ManyToOne注釋。 另一方面,我的用戶和我的組都有一組相關的user_group-entities,它們都是私有成員,並使用@OneToMany -annotation聲明。

我有三個問題:

  1. 這是在JPA 2.0中建模附加字段問題的正確方法嗎?
  2. 我不允許同時使用user_group中的user和group作為主鍵,因為它們不是有效的主鍵類型。 確實有必要聲明一個新的主數據庫。
  3. 這是這些聯接表/實體的通用工作流程嗎?

...

EntityManager em = ...
...
em.getTransaction().begin();
User u = new User("Pete");
Group g = new Group("Anonymous workaholics")
UserGroup ug = new UserGroup();
ug.addUser(u);
ug.addGroup(g);

em.persist(u); em.persist(g); em.persist(ug);
em.getTransaction().commit();
em.close()

非常感謝!

  1. 是的,這是很好的方法。
  2. 可能有一個由兩個ManyToOne關聯組成的復合主鍵,但是在映射和應用程序其余部分中,它要處理起來要復雜得多,而且效率也較低。 您有一個實體,因此就像對所有其他實體一樣,並使用自動生成的單列主鍵。 該實體曾經是多對多關聯的聯接表的事實是無關緊要的。
  3. 是的,這看起來還可以,除了addUser()addGroup()方法應分別命名為setUser()setGroup() :給定的UserGroup只有一個用戶和一個組。 我還將為實體本身使用另一個名稱。 例如“會員資格”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM