Hibernate 从一个子类更改为另一个子类的最智能方法(更新鉴别器值)
背景:我正在为以下类实现持久性:Hibernate 从一个子类更改为另一个子类的最智能方法(更新鉴别器值),hibernate,hierarchy,discriminator,table-per-hierarchy,Hibernate,Hierarchy,Discriminator,Table Per Hierarchy,背景:我正在为以下类实现持久性: class-Person 抽象类联系人信息 电子邮件扩展了ContactInfo SnailMail扩展了ContactInfo 每个人都有一个对联系人信息对象的引用。(并且一个联系人信息对象可以在多个人之间共享) 在我的用户界面中,我需要让用户编辑联系人信息对象,并可能将电子邮件地址替换为蜗牛邮件地址。(如果要替换的联系人信息对象在多人之间共享,则所有这些人都应更新其联系人信息。) 然而,据我所知,Hibernate拒绝更新discriminator列
class-Person
抽象类联系人信息
电子邮件扩展了ContactInfo
SnailMail扩展了ContactInfo
如果(B)是解决方法,我可以使用一些HQL语句来更新引用,还是应该“手动”加载/更新/保存所有受影响的person对象?我认为您不太可能使用另一个类的全新实例来更新它。毕竟,您已经创建了一个新实体,因此它不是真正的更新 您确定此人不需要多个联系人信息吗?如果关系有很多,你可以这样处理,也许你已经在处理类似的案例了。web界面将显式显示“地址1,2,…”,每个地址根据其特定类型呈现,每个地址的末尾都有“-”按钮和“+”按钮。这将清楚地表明,如果他们想更改联系人信息的类型,他们必须删除/添加联系人信息 类似的方法是删除/重新创建联系人信息,仅当用户更改了其类型时(可能您已经需要呈现新的web表单)。我认为在这种情况下,你无法避免更新与其他人的链接。我将通过使关系具有双向性来实现这一点,即引入Person.getContactInfo()和ContactInfo.getPersons()。我将管理add()/delete()方法中的双向性(即addContactInfo(ContactInfo c)应调用c.addPerson(此),反之亦然,请参见),Hibernate应能够自动更新外键