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”的映射。

我创建了两个实体对象,一个用于联系人,一个用于 Emp,如下所示,并且在联系人实体上获得了单映射

以下是联系实体

@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)。我不确定加入是否是解决方案,或者不清楚如何为此添加加入。设计此场景的任何建议。

4

1 回答 1

0

您可以将两个实体类组合成一个实体类或使用两个表。

但是,最好将其拆分为两个表并在两个表之间创建适当的关系。当前的模式设计不是最优的。

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

例如

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

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

如果您在 Hibernate 中使用鉴别器,您还可以选择指定一个公式, 例如

<discriminator formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"     type="integer"/>
于 2013-11-13T04:20:34.623 回答