在一个项目中,我们必须将一个实体映射到两个表。
表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/

10-09 03:06