在另一种关系中使用多对多联结表

时间:2016-04-27 08:29:12

标签: java hibernate jpa orm

我对Hibernate ManyToMany映射有疑问。我有两个类A和B,它们之间的映射是由Hibernate解决的ManyToMany映射:

@Entity
@Table(name="A")
public class A {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(name="A_B", joinColumns=@JoinColumn(name="A_id"), inverseJoinColumns=@JoinColumn(name="B_id"))
    private Set Bs;
}

@Entity
@Table(name="B")
public class B {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany(mappedBy="b")
    private Set As;
}

用户和组的外键是" A_id"和" B_id"。 Join Table称为A_B。

现在,我想添加C.我希望A_B与C有关系,与C和A_B建立多对多关系,我可以称之为A_B_C。

@Entity
@Table(name="C")
public class C {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(name="A_B", joinColumns=@JoinColumn(name="C_id"), inverseJoinColumns=@JoinColumn(name="?????"))
    private Set A_Bs; // Don't have any UserGroup entity !
}

编辑:所以我将创建A_B实体,A和B以及A_B有2个@OneToMany关系。

问题:A_B关于主键的最佳解决方案是什么?嵌入式主键还是生成的ID?我不想要重复(user_id,group_id):/只有唯一约束就足够了吗?

A_B< - > C关系?我猜不需要任何实体A_B_C,而@ManyToMany就够了......

我将不胜感激。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为您不需要User中与Group的关联,因为Group就像字典一样。

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(name = "users_groups")
    private Set<Group> groups;

}

@Entity
@Table(name="groups")
public class Group {

    @Id
    @GeneratedValue
    private Long id;

}

您需要在@ManyToMany

中与Group建立Newsletter关联
@Entity
@Table(name="newsletters")
public class Newsletter {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(name="newsletters_groups")
    private Set<Group> groups;
}