JPA / Hibernate ManyToMany vs双面OneToMany / ManyToOne

时间:2015-09-15 01:39:11

标签: java database hibernate jpa intellij-idea

我正在开发JavaEE应用程序,我使用JPA / Hibernate作为持久性引擎。在开发应用程序时,我想到了一些问题。

应用程序由用户及其在N:M关系中的角色组成。这是上表的数据库子集。

enter image description here

我对Hibernate相对较新,起初我要求IntelliJ IDEA为我生成映射。它的作用是生成以下Java类:

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

因此,它生成了关系表和两个1:N关系的映射,一个在useruserXrole之间,一个在roleuserXrole之间。

经过一些研究,我发现通过使用@ManyToMany注释,我可以省略将userXrole表映射到Java类,并在注释中将其声明为@JoinTable

所以问题是:

  • 为什么IntelliJ会以某种方式生成

它是一种更通用的方式,有助于生成,还是有其他任何优势。你会赞成这种或那种方式吗?

1 个答案:

答案 0 :(得分:1)

  

它是一种更通用的方式,有助于生成,还是有其他任何优势。

JPA不知道某个表是否只是一个连接表,这就是你必须告诉它的原因(使用@JoinTable)。生成器可能会猜测,但如果您的表名与JPA默认值匹配,它可能只生成@ManyToMany

  

你会支持这种或那种方式吗?

我使用@ManyToMany,如果我没有理由(对于懒惰/渴望获取更精细的控制可能?)用于单独的映射实体,主要是因为代码少=错误少。