我正在开发一个 JavaEE 应用程序,我使用 JPA/Hibernate 作为持久性引擎。在开发应用程序时,我想到了一些问题。
应用程序由用户及其在 N:M 关系中的角色组成。这是上述表格的数据库子集。
我对 Hibernate 比较陌生,起初我要求 IntelliJ IDEA 为我生成映射。它所做的是生成以下 Java 类:
- 用户实体.java
- RoleEntity.java
- UserXRoleEntity.java
- UserXRoleEntityPK.java
因此,它为关系表和两个 1:N 关系生成一个映射,一个在 user
和 userXrole
之间,一个在 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/