我们有什么?
我们有来自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的两个实现,但是它并不那么优雅
最佳答案
答案取决于您要存储的方式。使用@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;
}