java - JPA/Hibernate ManyToMany vs 双面OneToMany/ManyToOne

标签 java database hibernate jpa intellij-idea

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

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

enter image description here

我对 Hibernate 比较陌生,起初我要求 IntelliJ IDEA 为我生成映射。它所做的是生成以下 Java 类:

  • 用户实体.java
  • RoleEntity.java
  • UserXRoleEntity.java
  • UserXRoleEntityPK.java

因此,它为关系表和两个 1:N 关系生成一个映射,一个在 useruserXrole 之间,一个在 role 之间和 userXrole

经过一些研究,我发现,通过使用 @ManyToMany 注释,我可以忽略将 userXrole 表映射到 Java 类中,而只需在注释中声明它作为 @JoinTable

那么问题是:

  • 为什么 IntelliJ 以这种方式生成实体

它只是一种更通用的方式来帮助生成,还是有任何其他优势。您会赞成一种方式吗?

最佳答案

Is it just a more generic way that helps generation, or does it have any other advantages.

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

Would you argue in favour of one way or the other?

如果我没有理由(对惰性/急切获取的更细粒度的控制,也许?)用于单独的映射实体,我会使用@ManyToMany,主要是因为更少的代码=更少的错误。

关于java - JPA/Hibernate ManyToMany vs 双面OneToMany/ManyToOne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576359/

相关文章:

Java 和开关盒

spring - 如何使用 Spring 和 Hibernate 在项目中通过 PowerMockito 模拟 SessionFactory 或 Session?

java - HibernateForeignKey映射注释

php - SQL 使用 PHP 递归更新表

database - 将代理键添加到现有 Oracle 数据库表的首选方法

python - 从 *.sql 文件自动恢复数据库

java - 用于在单个表中查找最新的半唯一行的 Hibernate 实体查询

java - 逻辑表达式和中间代码生成

java - 如何使用 Swing 在 JFrame 中添加面板

Java 网络模拟器入门