Hibernate 如何定义两个抽象类之间的manytone关系

Hibernate 如何定义两个抽象类之间的manytone关系,hibernate,Hibernate,我有以下四节课 @MappedSuperclass @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class Platform{ @Id @Column(name = "PLATFORM_ID") @GeneratedValue(strategy = GenerationType.AUTO) private Integer platformId; ...

我有以下四节课

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Platform{

    @Id
    @Column(name = "PLATFORM_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer platformId;

    ...


@Entity
@Table(name = "ANDROID_PLATFORM")
public class AndroidPlatform extends Platform{

    public AndroidPlatform(){

    }
    ...


@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Application{

    @Id
    @Column(name = "APPLICATION_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer applicationId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="PLATFORM_ID")
    private Platform platform;

    ...


@Entity
@Table(name = "ANDROID_APPLICATION")
public class AndroidApplication extends Application {
    public AndroidApplication(){

    }
    ...
当我开始我的项目时,它抛出了这样一个错误

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.***.model.AndroidApplication.platform references an unknown entity: com.***.model.Platform
...
在hibernate中使用抽象类的最佳方法是什么


请提供帮助。

在您的抽象类应用程序中(通过AndroidApplication中的继承),您使用的是
私有平台。平台是一个抽象类,不能实例化,它只有部分映射信息(缺少具体的表名)

Hibernate需要一个无参数构造函数来实例化加载的实体。它还需要知道要使用哪个类(不是抽象类而是实现类),并且需要根据成员变量的类型提供所有映射信息

解决方案:您必须在应用程序或AndroidApplication中与
私有AndroidPlatform平台
交换
私有平台平台
,并且AndroidPlatform类型的此变量必须具有hibernate注释


第二种解决方案:如果您绝对需要Java结构,那么您可以使用xml映射文件。您可以在每个子类中指定确切的类型,即使成员变量的Java类是该类型的超类。

尝试使用
@Entity
而不是
@MappedSuperClass