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