在项目中,我们必须将一个实体映射到两个表。 table part_info存储商品信息,table part_label存储将在屏幕上显示的标签。
Table part_info
id part_no part_description
Table part_label
id part_no_label part_description_label
然后在我们的实体
@Entity
@Table(name="part_info")
@SecondaryTable(name="part_label",pkJoinColumns= {@PrimaryKeyJoinColumn(name="id",referencedColumnName="id")})
public class PartInfo implements Serializable {
@id
private int id;
@Column(name = "part_no")
private String partNo;
@Column(name = "part_description")
private String partDesc;
@Column(table="part_label",name="part_no_label")
private String partNoLabel;
@Column(table="part_label",name="part_description_label")
private String partDescLabel;
....
}
但这只会将part_info的一条记录映射到part_label的一条记录。
在我们的案例中,不同的零件信息可能使用相同的零件标签。 例如 我们将使用从part_label检索的标签,如下所示:
Part#
Part Desc
但我们从part_info表
中检索了许多部分信息PA123 AAA
PA123 DDD
PA234 BBB
PA345 CCC
然后在UI中,我们将显示为:
Part#:PA123 Part Desc:AAA
Part#:PA123 Part Desc:DDD
如果在@SecondaryTabel上方使用,则每个part_info和每个part_label都是一对一的关系,如果需要检索PA123的两个部分记录,还需要检索两次相同的标签。
是否有任何方式可以将一个零件标签映射到多个零件信息?
答案 0 :(得分:2)
您误解了SecondaryTable,因为它只适用于一对一的情况,如果删除该对象,则删除两个表中的行。辅助表中没有“重复使用”条目......因为辅助表具有到主表的FK !!!
如果您想重用某些数据,请将其作为一个单独的实体。
答案 1 :(得分:1)
我认为最合乎逻辑的解决方案是将PartLabel
建模为一个单独的实体,并在ManyToOne
与PartInfo
之间建立PartLabel
关系。