我假设你有一个子对象这就是独特的性能为什么要使用继承,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中一样,对象也不能改变它的类型。使用带有子标志的单个实体。 –