我如何将两个类映射到一个字段

时间:2014-03-13 10:49:23

标签: java hibernate

我们有什么? 我们有两个来自Dictionary和QueueProfile的子节。我想要地图字段配置文件,如下面的代码。我怎么能映射这个?

@MappedSuperclass
public class Dictionary implements Serializable {}

@Entity
public class Speciality extends Dictionary{}

@Entity
public class LdpType extends Dictionary{}

@Entity
public class QueueProfile{
    Dictionary profile;
}

或者在这种情况下它不可行。 我知道我可以创建两个具有不同字段和歧视的QueueProfile实现,但它不那么优雅

1 个答案:

答案 0 :(得分:1)

答案取决于您想要存储它的方式。使用@MappedSuperclass时,它希望您将共享一个超类,但是实体本身从哪个表中获取数据是明确的。例如:

@MappedSuperclass
public class Dictionary implements Serializable {}
@Entity
public class QueueProfileUsingSpeciality extends Dictionary {}
@Entity
public class QueueProfileUsingLdpType extends Dictionary {}

Speciality实体中,您实际上想要的内容可能是LdpType QueueProfile。在这种情况下,Hibernate知道在哪里获取QueueProfile的数据,但是为了实例化profile,它需要知道要使用哪个表/实体/子类。这是通过使用鉴别器来处理的。

public class Dictionary implements Serializable {}
@Entity
@DiscriminatorValue("Foo")
public class Speciality extends Dictionary{}
@Entity
@DiscriminatorValue("ldp_type_profile")
public class LdpType extends Dictionary{}
@Entity
@Inheritance
@DiscriminatorColumn(name="which_profile")
public class QueueProfile {
    Dictionary profile;
}