Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Hibernate 在多对多上休眠多对多_Hibernate_Annotations_Many To Many_Composite Primary Key - Fatal编程技术网

Hibernate 在多对多上休眠多对多

Hibernate 在多对多上休眠多对多,hibernate,annotations,many-to-many,composite-primary-key,Hibernate,Annotations,Many To Many,Composite Primary Key,我正在尝试使用注释将现有数据库映射到Hibernate。 问题如下 “组织”和“组织\角色”有一种多对多的关系,这种关系在 表“organization_has_roles”使用两个主键作为联接表中的复合主键 接下来是一个“用户”表。用户可以在多个组织中扮演一个角色。这在名为“users\u has\u organizations\u and\u role”的联接表中再次得到解决,该联接表具有“user\u id”、“organization\u id”和“organization\u role

我正在尝试使用注释将现有数据库映射到Hibernate。 问题如下

“组织”和“组织\角色”有一种多对多的关系,这种关系在 表“organization_has_roles”使用两个主键作为联接表中的复合主键

接下来是一个“用户”表。用户可以在多个组织中扮演一个角色。这在名为“users\u has\u organizations\u and\u role”的联接表中再次得到解决,该联接表具有“user\u id”、“organization\u id”和“organization\u role\u id”的复合主键以及“user\u id”和“organization\u id”上的唯一索引

“users\u has\u organizations\u and\u role”引用“organization\u has\u roles”组合主键(organization\u id,organization\u role\u id)和用户表(user\u id)

在这件事上,我找不到有效的例子

有没有可能绘制出这张地图。我应该使用哪些注释以及如何使用


我使用的是Hibernate4,尽管这可能无关紧要

这种方法的主要问题是存在不可映射的ORM不匹配:数据库中有一个实体(
组织有角色
),它在OO中被转换为关系。由于此关系不是实体,并且没有
@Id
,因此无法引用到其他实体中


一种解决方案是将数据库实体
organization\u has\u roles
映射到一个JPA/Hibernate实体,使用复合键或合成键(您喜欢的任何键)。然后,您可以在
用户
模型中引用该实体

这种方法的主要问题是存在不可映射的ORM不匹配:数据库中有一个实体(
组织有角色
),它在OO中被转换为关系。由于此关系不是实体,并且没有
@Id
,因此无法引用到其他实体中


一种解决方案是将数据库实体
organization\u has\u roles
映射到一个JPA/Hibernate实体,使用复合键或合成键(您喜欢的任何键)。然后,您可以在
用户
模型中引用该实体

如果我用复合键将组织角色映射到JPA/Hibernate实体中,我还必须重新映射组织和组织角色JPA/Hibernate实体,对吗?到目前为止,它们只是由一个带有连接表的@manytomy映射而成。我对OP的设计感到有点奇怪。通常情况下,它应该是某种组织和角色,它们之间有多对多的关系。通过将多对多更改为新实体OrganizationRole,您将看到OrganizationRole和Role OrganizationOrole是多对多-one@Encory:没错,您必须重新映射它们,以便它们指向此新实体。组织和角色具有多对多关系。这方面的映射是直截了当的。引入用户关系时出现问题。同样,在纯SQL JDBC中也没有问题,但至少可以说,要将其映射到Hibernate中有些困难。我认为连接是通过另一个连接表进行的。但我将尝试一下新的JPA/Hibernate实体建议。虽然我曾希望我错过了一些神奇的注释。@AdrianShum,这确实感觉有点奇怪,但如果你停下来想一想,这是合乎逻辑的。问题是:多对多只是一种关系,无论是在数据库级别还是OO级别。如果您需要以某种方式引用这个关系,那么这个关系不仅仅是一个关系,它是一个事物(对象、实体,您可以命名它)。在数据库级别,它们的表达方式相同,但在OO中的表达方式不同。如果我使用复合键将组织角色映射到JPA/Hibernate实体,我还必须重新映射组织和组织角色JPA/Hibernate实体,对吗?到目前为止,它们只是由一个带有连接表的@manytomy映射而成。我对OP的设计感到有点奇怪。通常情况下,它应该是某种组织和角色,它们之间有多对多的关系。通过将多对多更改为新实体OrganizationRole,您将看到OrganizationRole和Role OrganizationOrole是多对多-one@Encory:没错,您必须重新映射它们,以便它们指向此新实体。组织和角色具有多对多关系。这方面的映射是直截了当的。引入用户关系时出现问题。同样,在纯SQL JDBC中也没有问题,但至少可以说,要将其映射到Hibernate中有些困难。我认为连接是通过另一个连接表进行的。但我将尝试一下新的JPA/Hibernate实体建议。虽然我曾希望我错过了一些神奇的注释。@AdrianShum,这确实感觉有点奇怪,但如果你停下来想一想,这是合乎逻辑的。问题是:多对多只是一种关系,无论是在数据库级别还是OO级别。如果您需要以某种方式引用这个关系,那么这个关系不仅仅是一个关系,它是一个事物(对象、实体,您可以命名它)。在数据库级别,它们的表达方式相同,但在OO中它们的表达方式不同。