我有两节课
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="PERSONTYPE")
@DiscriminatorValue(value="PERSON")
public class Parent {
.......
}
@Entity
@DiscriminatorValue(value="CHILD")
public class Child extends Parent{
.......
}
我的场景:
创建一个人——然后 PERSONTYPE = 'PERSON'
转到“人员”页面并通过选中“是儿童”复选框将其更新为“儿童”,然后保存后必须将人员保存为“儿童”类型。
那么如何将实体类型从“PERSON”更改为“CHILD”?
这里有几种可能性:
看起来显而易见的事情是在 Parent 对象上 setIsChild(true) 并提交它,但是我不确定 JPA 将如何对此做出反应,因为您现在提交了一个 Parent 并且结果是一个 Child。不确定这是否可能。这绝对值得一试。
另一种选择是编写 JPA 更新语句(绕过 Child 和 Parent 对象)来更新数据库中的 is_child 列。然后,当您随后查询此记录时,您将得到一个子项而不是父项。
最后,您可以使用父对象的所有值创建一个子对象,然后删除父对象并创建子对象。这将起作用,但是除了删除/创建所需的额外处理之外,子代的 id 可能会更改(而不是简单的更新)(如果您使用自动生成的 id,则它会更改)。 IMO,这不是一个好的解决方案,但它会起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)