簡體   English   中英

JPA /休眠的ManyToMany與雙面的OneToMany / ManyToOne

[英]JPA/Hibernate ManyToMany vs two-sided OneToMany/ManyToOne

我正在開發JavaEE應用程序,並使用JPA / Hibernate作為持久性引擎。 在開發應用程序時,我想到了一些問題。

該應用程序由用戶及其在N:M關系中的角色組成。 這是上述表的數據庫子集。

在此處輸入圖片說明

我是Hibernate的新手,起初我要求IntelliJ IDEA為我生成映射。 它所做的是生成以下Java類:

  • UserEntity.java
  • RoleEntity.java
  • UserXRoleEntity.java
  • UserXRoleEntityPK.java

因此,它為關系表和兩個1:N關系生成了一個映射,一個在useruserXrole之間,一個在roleuserXrole之間。

經過研究,我發現通過使用@ManyToMany批注,我可以省略將userXrole表映射到Java類,而在批注中將其聲明為@JoinTable

所以問題是:

  • 為什么IntelliJ以這種方式生成實體

它只是一種有助於生成的更通用的方法,還是具有其他任何優點。 您會贊成一種方法還是另一種方法?

它只是一種有助於生成的更通用的方法,還是具有其他任何優點。

JPA不知道一個表是否僅僅是一個@JoinTable表,這就是為什么必須告訴它(使用@JoinTable )。 生成器可能會猜測,但是如果表名與JPA的默認值匹配,它可能只會生成@ManyToMany

您會贊成一種方法還是另一種方法?

如果我沒有理由(可能對延遲/渴望獲取進行更細粒度的控制?)沒有單獨映射實體的原因,則應該使用@ManyToMany,這主要是因為更少的代碼=更少的錯誤。

暫無
暫無

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

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