Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate ManyToMany vs双面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面_Java_Database_Hibernate_Jpa_Intellij Idea - Fatal编程技术网

Java JPA/Hibernate ManyToMany vs双面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面

Java JPA/Hibernate ManyToMany vs双面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面单面,java,database,hibernate,jpa,intellij-idea,Java,Database,Hibernate,Jpa,Intellij Idea,我正在开发一个JavaEE应用程序,并使用JPA/Hibernate作为持久性引擎。在开发应用程序时,我想到了一些问题 应用程序由N:M关系中的用户及其角色组成。下面是上述表的数据库子集 我对Hibernate比较陌生,起初我让IntelliJ IDEA为我生成映射。它所做的是生成以下Java类: UserEntity.java RoleEntity.java UserXRoleEntity.java UserXRoleEntityPK.java 因此,它生成了关系表和两个1:N关系的映射

我正在开发一个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会以这种方式生成实体
这只是一种更通用的方式,有助于发电,还是它有任何其他优势。你会赞成一种方式还是另一种方式

这只是一种更通用的方式,有助于发电,还是它有任何其他优势

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

你会赞成一种方式还是另一种方式


如果我没有理由的话,我会使用@ManyToMany(可能是对延迟/急切抓取的细粒度控制?)作为单独的映射实体,这主要是因为代码越少,错误就越少。

谢谢你的回复。您能否提供任何说明JPA数据库命名约定的源链接本案例2.10.4(pdf第48页)