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