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

时间:2012-02-14 16:56:08

标签: 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 are hidden.
   Set<Member> addedMembers; //memders that don't meet the network definition, but have been added in anyway.

Member
   Set<Network> attachedNetworks;

如果我不需要这是双向的(例如,我只需要从网络中获取成员而不需要能够以其他方式旅行),对我来说最明显的解决方案是每组成员(network_member, suppressed_member, added_member)的链接表,但从另一个方面来说就是分崩离析。我想我可以使用单个链接表并将其转换为带有鉴别器列的实体,但每次我看到有人使用链接表作为实体时,代码似乎变成了灾难。

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

1 个答案:

答案 0 :(得分:0)

明显的便携式解决方案如下:

  1. 使用三个联接表,并且在成员实体中也有3组网络
  2. 使用额外的Attachment实体,具有成员,网络和附件类型(默认,禁止或添加)。在Network和Attachment之间建立OneToMany双向关联,在Member和Attachment之间建立另一个OneToMany双向关联。
  3. 如果它们不适合,请解释原因。