使用NHibernate / Hibernate将实体类型转换为子类型

时间:2010-12-09 15:00:30

标签: nhibernate hibernate orm inheritance casting

请您帮我找出以下问题的更好解决方案...... 我的域模型有一个层次结构:

class Document { 
  Int Id; 
  String Title; 
}
class Agreement : Document { 
  DateTime Signed; 
}

持久策略是每班表。即2个表:'文件'(Id,...)和'协议'(Fk_document,...)

首先是文件的注册。此刻我不知道文件的真实类型。所以我创建了新的Document并填写了它的属性'Title'。

一段时间后,我收到了其他信息。根据它,以前注册的文件实际上是在某个日期签署的协议。现在我可以填写“已签署”协议的财产。

但要做到这一点,有必要以某种方式将类型从Document转换为Agreement。我可以像这样进行SQL调用:

INSERT INTO AGREEMENTS (FK_DOCUMENT, SIGNED_DATE) VALUES ( 1111111, TO_DATE('01-01-2000') ) 

(其中'1111111'是Hibernate第一次保存时分配给文档的ID)

我认为这不是最好的方式!但我找不到任何其他人...... 谢谢!

(我想到这个例子,真正的用例是相当困难的,我不想妨碍这个问题。文件必须尽快保存)

1 个答案:

答案 0 :(得分:1)

当您需要“更改持久化实体的类”时,这表明您并不真正想要将其建模为类层次结构。相反,使用组合。