【发布时间】:2013-03-24 20:31:10
【问题描述】:
背景:我正在为以下类实现持久性:
class Person-
abstract class ContactInfoEmail extends ContactInfoSnailMail extends ContactInfo
每个 Person 都有一个对 ContactInfo 对象的引用。 (并且一个 ContactInfo 对象可以在多个 Person 之间共享。)
在我的用户界面中,我需要让用户编辑联系信息对象,并可能将电子邮件地址替换为蜗牛邮件地址。 (如果要替换的联系信息对象在多个人之间共享,则所有这些人都应该更新他们的联系信息。)
然而,据我了解,Hibernate 拒绝更新鉴别器列,因此只需创建一个新的 SnailMail 对象,并为其赋予 的主键值Email 对象被替换,保存无效。
问题:允许用户从 电子邮件 更改 ContactInfo 对象的最佳方法是什么em> 到 SnailMail?
(这些对象是“短暂的”。它是 Web 应用程序的一部分,所有对象都会在每次请求时通过 HQL 重新读取,因此无需担心任何分离的对象。)
到目前为止我的想法:我意识到我可以删除旧对象,插入新对象。如果这是首选方法,我应该 (A) 尝试重用旧的主键值(在这种情况下我需要使用分配的生成器)还是 (B) 让后端为新对象生成新的 ID,并且更新人员联系人引用以指向新对象?
如果 (B) 是要走的路,我可以使用一些 HQL 语句更新引用,还是应该“手动”加载/更新/保存所有受影响的人员对象?
【问题讨论】:
标签: hibernate hierarchy discriminator table-per-hierarchy