我们有什么?
我们有来自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实体中想要的东西可能是LdpTypeQueueProfile。在这种情况下,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;
}

08-27 19:54