我假設你有一個子對象這就是獨特的性能爲什麼要使用繼承,otherwize就像@ZB Ziet評論你應該使用兒童標誌
解決方案1
我看到你正在使用單表繼承策略,因此您必須修改descriminator字段manulay(通過使用SQL查詢)並在子表上設置適當的字段。
UPDATE Parent SET PERSONTYPE='CHILD' WHERE id = 1
practicaly您使用本機查詢,這樣
enityManager.createNativeQuery(「UPDATE PERSON SET PERSONTYPE = ?, 」
「 VERSION = VERSION + 1 WHERE ID = ?」)
.setParameter(1, 'CHILD')
.setParameter(2,personID)
.executeUpdate();
那麼你可以使用EntityManager的獲得孩子和設置屬性
entityManager.find(Child.class,1).childProp=xxxx
**解決方案2 **
國際海事組織,這裏做的最好的事情是代替usi吳單表策略,你應該使用連接表的策略
在連接表的戰略新表
entireis爲每個孩子有thier id作爲外鍵父實體創建的。因此更改ID還將設置其父
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
...
那將是冷靜,如果你可以創建新的子集的ID相同,家長和保存。 Child c = new Child(); c.setId(parent.getId()); entityManager.merge(c)
。但是hibernate試圖重新創建一個父對象導致id confilict。
所以解決的辦法就是編寫本地查詢 em.createNativeQuery("INSERT into child (id) VALUES (1)").executeUpdate(); //1 being the parent id
more reference on inheritance
做你嘗試分配的孩子到新的父實例包括id字段的值是多少? – erencan
繼承不是這裏正確的設計。就像在Java中一樣,對象也不能改變它的類型。使用帶有子標誌的單個實體。 –