私は Hibernate に取り組んでおり、2 つの抽象クラスが必要です。最初のものProduct
はメインのものであり、という名前のデータベースにテーブルがあってはなりませんproduct
。2 番目の抽象クラスはComPart
(から継承Product
) であり、gpu や cpu などの一部のコンピューター部分はこのクラスから継承されます。名前が付けられたテーブルは 1 つだけcom_part
で、CPU と GPU の両方がこのテーブルにある必要があります (階層ごとのテーブル)。
@MappedSuperclass
public abstract class Product{
private long pID;
protected String manufacturer;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "PID", unique = true, nullable = false)
public int getPID() {
return pID;
}
@Column(name = "Manufacturer")
public String getManufacturer() {
return manufacturer;
}
}
// computer part abstract class inherited from Product
@Entity
@Table(name = "com_part")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="disc",
discriminatorType=DiscriminatorType.STRING
)
@AttributeOverrides({
@AttributeOverride(name="manufacturer", column=@Column(name="Manufacturer"))
})
public abstract class ComPart extends Product {
private String platform;
@Column(name = "PLATFORM", length = 10)
public String getPlatform() {
return platform;
}
}
// Various computer hardwares inherited from ComPart
@Entity
@Table(name="com_part")
@DiscriminatorValue("CPU")
public class Processor extends comPart {
private String socketType;
private String chipset;
//getters setters...
}
@Entity
@Table(name="com_part")
@DiscriminatorValue("GPU")
public class GraphicsCard extends comPart {
private double memory;
//getters setters...
}
これらすべての機能をどのようにマッピングできますか? 上記のコードでは、sessionfactory を作成することさえできません?! 次のエラーが生成されます。
Failed to create sessionFactory object.java.lang.NullPointerException
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.bts.core.hb.HibernateUtil.<clinit>(HibernateUtil.java:35)
と
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1424)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1351)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1733)
at com.bts.core.hb.HibernateUtil.<clinit>(HibernateUtil.java:32)