在一个项目中,我们必须将一个实体映射到两个表。
表part_info存储商品信息,表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
然后在用户界面中,我们将显示为:
Part#:PA123 Part Desc:AAA
Part#:PA123 Part Desc:DDD
如果在@SecondaryTabel上使用,则每个part_info和每个part_label都是一对一关系,如果需要检索部件PA123的两个记录,还需要检索相同的标签两次。
一个零件标签可以以任何方式映射到许多零件信息吗?
最佳答案
您误解了SecondaryTable,因为它仅用于一对一的情况,并且如果删除了对象,则将删除两个表中的行。辅助表中没有条目的“重用”……因为辅助表与主表之间有一个FK !!!
如果要重用某些数据,则将其设为单独的实体。
关于java - 与主表不是一对一关系时如何定义SecondaryTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8181924/