我有這種情況在Hibernate中有兩個類之間的父子關係,但在數據庫中沒有這種關係,因爲子類表示一個查看,而不是表格。休眠@Inheritance與表作爲父母和作爲子視圖
現在,問題是Hibernate很高興需要提供Inheritance annotation,否則Hibernate會考慮一些默認值並嘗試尋找一個不存在的「dtype」列。
我試圖使用TABLE_PER_CLASS作爲策略(默認值是SINGLE_TABLE),但在這種情況下,Hibernate做了一些與子類關聯的視圖的聯合,這在這裏沒有意義,並且有些錯誤引發了一個不存在的列 - 一個存在於表和視圖中的列,但任何方式。
問題在於如何根據註釋對此進行正確建模,或者如何在不產生涉及子級的基礎查詢的情況下詢問父實體。 (第二個問題是問here我沒有給一個嘗試但因爲我希望有一個更好的解決方案。)
編輯:更好的說明解釋,這裏是一段代碼相當於給我的設置:
@Entity
@Table(name = "PARENT")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class ParentEntity implements Serializable {
// ...
}
@Entity
@Table(name = "PARENT_VIEW")
public class ChildEntity extends ParentEntity implements Serializable {
// ...
}
某些代碼可能會有所幫助。 –
我已經包含了一些代碼來簡化閱讀;) – DanielM
如果'ChildEntity'是唯一的子類,並且*將永遠擁有*,那麼可以沿着'SELECT p FROM ParentEntity p WHERE TYPE(p)< > ChildEntity'。否則,我不相信如果沒有'@ MappedSuperclass'解決方案就無法做到這一點。 –