使用实体的复合键作为另一个实体中的 ManyToMany 键
Posted
技术标签:
【中文标题】使用实体的复合键作为另一个实体中的 ManyToMany 键【英文标题】:Use a Composite key of an entity as the ManyToMany key in another entity 【发布时间】:2020-10-16 21:07:20 【问题描述】:我有以下情况,我正在尝试像用户和用户所属的所有团队一样进行多对多映射。
Class AID
private int b
private int c
@IdClass(AID.class)
Class A
@Id
@SequenceGenerator(name = "b_seq", sequenceName = "id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b_seq")
private int b
@Id
@Column(name = "col_c")
private int c
Class D
#need to define a many to many mapping with A here
假设 D 类是 Teams 类,而 A 类有一个复合键作为主键,我将如何进行?
【问题讨论】:
【参考方案1】:我使用的是 MSSQL,似乎需要实际指定 referencedColumnName。
所以如果D类如下
Class D
@Id
private int e
@ManyToMany
@JoinTable(
name = "d_a_info",
joinColumns =
@JoinColumn(name = "e", referencedColumnName = "e"),
,
inverseJoinColumns =
@JoinColumn(name = "b", referencedColumnName = "b"),
@JoinColumn(name = "c", referencedColumnName = "c")
)
private Set<A> setOfA= new HashSet<>();
在 AID 类中我也不得不手动设置 getter 方法
@Column(name = "b", nullable = false)
public String getB()
return this.b;
@Column(name = "c", nullable = false)
public String getC()
return this.c;
【讨论】:
以上是关于使用实体的复合键作为另一个实体中的 ManyToMany 键的主要内容,如果未能解决你的问题,请参考以下文章
如何进行 Hibernate XML 映射,一对多使用 1 PK 映射到另一个具有复合键的实体