Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
具有子类型的双向多对多JPA映射_Jpa_Many To Many_Discriminator - Fatal编程技术网

具有子类型的双向多对多JPA映射

具有子类型的双向多对多JPA映射,jpa,many-to-many,discriminator,Jpa,Many To Many,Discriminator,我的基本场景是一个双向的多对多关系,该关系正被JPA映射。很简单。然而,我需要在映射中添加一个“类型”,我正在努力实现最好的实现。以下是大纲: Network Set<Member> defaultMembers; //members that meet the network definition Set<Member> suppressedMembers; //members that meet the network definition, but ar

我的基本场景是一个双向的多对多关系,该关系正被JPA映射。很简单。然而,我需要在映射中添加一个“类型”,我正在努力实现最好的实现。以下是大纲:

Network
   Set<Member> defaultMembers; //members that meet the network definition
   Set<Member> suppressedMembers; //members that meet the network definition, but are hidden.
   Set<Member> addedMembers; //memders that don't meet the network definition, but have been added in anyway.

Member
   Set<Network> attachedNetworks;
网络
设置默认成员//满足网络定义的成员
设置抑制成员//符合网络定义但隐藏的成员。
设置附加成员//不符合网络定义,但已添加的内存。
成员
设置连接网络;
如果我不需要双向访问(例如,我只需要从网络访问成员,而不需要以另一种方式访问),那么对我来说最明显的解决方案是为每组成员创建一个链接表(
network\u-member,suppressed\u-member,added\u-member
),但从另一个角度看,这是不可能的。我想我可以使用一个链接表并将其转换为一个带有鉴别器列的实体,但每次我看到有人使用链接表作为实体时,代码似乎都会变成一场灾难


我发现了许多类似的问题,但这些问题要么过于具体,要么答案没有完全涵盖我正在寻求的解决方案。关于处理这种情况的最佳方法有什么建议吗?

显而易见的便携式解决方案如下:

  • 使用三个联接表,并且在成员实体中还有三组网络
  • 使用附加的
    附件
    实体,具有成员、网络和附件类型(默认、抑制或添加)。在网络和附件之间有一个OneToMany双向关联,在成员和附件之间有另一个OneToMany双向关联

  • 如果不适合,请解释原因。

    第一种解决方案非常适合;主要的障碍是,从会员的角度来看,我不在乎依恋的类型。再看一遍,我真正的问题可能是“当包含网络关系时,有没有一种模式可以让我对成员的查询保持简单,而不必针对三个单独的集合?”我将继续编辑我的问题。如果这是主要目标,我的第二个解决方案可能是最好的。好的,我只是重新阅读了你的第二个建议,并意识到它不是我最初设想的那样。我来看看如何设置。谢谢