首页 文章

为同一实体上的onToMany映射设计JPA Entity对象

提问于
浏览
2

如果我们有一个表格说EMP_CONTACTTYPE,如下所示

EMP  EMPNAME CONTACTTYPE CONTACT
1     W      1           EMAIL
2     X      1           EMAIL
3     Y      2           PHONE
4     Z      2           PHONE

如果我们想要显示详细信息

EMAIL    PHONE
W        Y
X        z

我们应该如何将实体对象设计为映射到同一个表“EMP_CONTACTTYPE” .

我为Contact创建了两个Entity Object,另一个为Emp创建了一个Entity Object,并且在Contact Entity上有一个onetomany映射

以下是联系实体

@Entity
@Table(name = "EMP_CONTACTTYPE")
public class CONTACT
{
private String CONTACT_TYPE;
private String CONTACT;

@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "EMP_CONTACTTYPE", joinColumns = { xxxxxx })    
private List<EMP> EMP;
}

以下是EMP实体

@Entity
@Table(name = "EMP_CONTACTTYPE")
public class EMP
{
private String EMPLOYEE_NAME;
private String EMPLOYEE_KEY;
}

预期结果类似于Contact Object Type(1和Email)我们需要两个Employee对象(W和X) . 我不确定加入是否是解决方案,或者不清楚如何为此添加联接 . 设计此场景时的任何建议 .

1 回答

  • 0

    您可以将两个Entity类组合到一个Entity类中,也可以使用两个表 .

    但是,您最好将其拆分为两个表,并在两个表之间创建适当的关系 . 当前的架构设计不是最佳的 .

    无论如何,根据您的情况并根据您的注释,由于您有一个包含所有这些数据的表,您可以从 CONTACT 类扩展 EMP 类并创建一个鉴别器列 . 使用这种方法,您会发现以下类注释很有用:

    例如

    @Inheritance(strategy = InheritanceType.JOINED)
    @DiscriminatorColumn(name = "columnname", discriminatorType = DiscriminatorType.INTEGER)
    @DiscriminatorValue(value = "value")
    

    您应该研究这些注释并选择适当的策略等 . 这应该让您走上正确的道路 .

    如果您使用Discrimators with Hibernate,您还可以选择指定公式,例如

    <discriminator formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"     type="integer"/>
    

相关问题