休眠繼承映射,我一個有一個接口:與接口父使用Groovy和Hibernate 4.3
interface PaymentMethod {
}
一個實現:
class Salary implements PaymentMethod {
private Long id
private Integer value;
protected Salary() {}
public Salary(Integer value) {
this.value = value
}
Integer getValue() {
return value
}
}
以下配置:
<class name="sandbox.payroll.PaymentMethod" abstract="true">
<id name="id" column="ID">
<generator class="sequence"/>
</id>
<union-subclass name="sandbox.payroll.imp.Salary" table="SALARY">
<property name="value" type="java.lang.Integer" column="VALUE" access="field"/>
</union-subclass>
</class>
並將hibernate.hbm2ddl.auto設置爲hsqldb內存模式中的創建 - 刪除。
當我運行一個測試時,我得到一個org.hibernate.PropertyNotFoundException: field [id] not found on sandbox.payroll.PaymentMethod
。基於Hibernate文檔的映射似乎很好,我不明白哪裏出了問題。任何提示?
UPDATE
1)發電機必須是在這種情況下的序列。
2)我可以通過在界面上定義getId和setId來實現它,但我不想這樣做,因爲它對於域設計是不必要的,它包含一個包含PaymentMethod專業化:
class Employee {
PaymentMethod paymentMethod
(...)
}
它是一個一對一relantionship其中僱員是所有者,所以付款方法的ID是不相關的,因爲它是相同的僱員的。因此,對於域模型,PaymentMethod不需要公開任何id,它只是一個持久性細節。
聯盟 - 子不工作,即使我的子類來定義的id屬性休眠抱怨說,付款方法應該有一個ID,儘管連我聲明它抽象的事實。我認爲我想達到的目標是不可能的。 – VitorCruz