【问题标题】:JPA/Hibernate ManyToMany vs two-sided OneToMany/ManyToOneJPA/Hibernate ManyToMany vs 双面 OneToMany/ManyToOne
【发布时间】:2015-09-15 01:39:11
【问题描述】:

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

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

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

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

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

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

所以问题是:

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

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

【问题讨论】:

    标签: java database hibernate jpa intellij-idea


    【解决方案1】:

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

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

    你会支持一种方式还是另一种方式?

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

    【讨论】:

    • 感谢您的回复。您能否提供任何说明 JPA 数据库命名约定的源链接?
    • download.oracle.com/otndocs/jcp/… - 对于这种情况 2.10.4(pdf 中的第 48 页)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多