如何表示与JPA的3向关系?

时间:2010-05-22 18:53:40

标签: java database-design jpa

用户可能有多个标签和链接。然后,用户将标签(或更多)与链接相关联。一个人如何代表后来的关系?

解决方案可以是btw用户的多对多关系,并与可选属性标签链接。 http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany#Mapping_a_Join_Table_with_Additional_Columns 在这种情况下,btw用户和标签的关系最好是“虚拟”。

我没有看到任何替代方案?

PS:我使用了谷歌书签术语,因为它很适合我的情况。

3 个答案:

答案 0 :(得分:6)

如果我的理解是正确的,那么你处于following案例:

  

取代三元关系

     

当发生三元关系时   他们应该永远是一个ER模型   在完成模型之前删除。   有时关系可以   由一系列二进制代替   链接对的关系   原始的三元关系。

     

alt text http://db.grussell.org/co22001%20notes_files/image043.gif        数字   :三元关系示例

     
      
  • 这可能导致某些信息丢失 - 不再清楚   哪位销售助理卖给了顾客   一种特殊的产品。
  •   
  • 尝试用实体类型和a替换三元关系   二元关系集。
  •   
     

关系通常是动词,所以   按名称命名新实体类型   关系动词改写为名词。

     
      
  • 关系销售可以成为实体类销售。
  •   
     

alt text http://db.grussell.org/co22001%20notes_files/image045.gif

     

图   :取代三元关系

     
      
  • 因此,销售助理可以链接到特定客户和两者   他们出售一个特定的   产品
  •   
  • 此过程也适用于更高阶的关系。
  •   

这将是我的建议:引入一个新的实体。

答案 1 :(得分:1)

只是

class Label {
    ...
    @OneToOne
    private Link link;
}

和/或

class Link {
    ...
    @OneToOne
    private Label label;
}

答案 2 :(得分:1)

添加可空的“标签”,用户链接只允许每个链接使用一个标签。如果你只需要一个标签,那就去吧。

如果每个链接需要多个标签,则引入第三个实体,例如

class LinkLabel
{
   @ManyToOne
   Link link;

   @ManyToOne
   Label label;  

   @ManyToOne
   User user;

}