前言:
即使在 SO 上,这也是一个被广泛提出的问题,而且答案也广泛地与Subclass
或实际SuperClass
接近(例如 [ 1 ])
实际答案:
在这些帖子 [ 2 ]、[ 3 ] 上,他们建议使用带EntityName
参数的 xml 映射。
因此,使用 xml 进行映射不需要超类,只需将EntityName
参数赋予两个相同的映射即可。
示例映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="DomainModel.User, DomainModel"
table="User1Object" entity-name="User1Object">
<id name="_id" access="field" column="id">
<generator class="assigned"/>
</id>
<property name= ...>
</class>
<class name="DomainModel.User, DomainModel"
table="User2Object" entity-name="User2Object">
<id name="_id" access="field" column="id">
<generator class="assigned"/>
</id>
<property name= ...>
</class>
</hibernate-mapping>
然后根据您需要的实体类型,您可以将适当的会话方法称为:
_session.Save("User1Object", user1)
或者
_session.Save("User2Object", user2)
帖子 2 和 3 被用作此片段的基础。官方来源 [ 4 ]
比赛后:
第一个问题的一个答案实际上是链接到这篇文章 [ 5 ] 有不同的方法:
您对对象的第一个实例说再见,将数据克隆到新实例并以不同的名称保存它。因此,没有违反 Hibernate 逻辑和每个人的内容:两个表中的相同数据并且没有使用子类。
嗯,该方法的实现或代码或可信度是某某,我也没有测试过。
另一个案例:
在这篇文章 [ 6 ] 中,有另一个人试图用更简单的方法来挑战超类方法,但同样,最可信的答案指出,这是不可能的另一种方式,官方的非 xml 方法就是所说的子类方法。
来源
[1]如何使用hibernate/jpa注解将一个类映射到不同的表
[2]将两个相同的表(相同的模式...)映射到 Hibernate 中的相同实体
[3]如何将 2 个相同的表(相同的属性)映射到 1 个实体
[4] http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname
[5] Hibernate 4:一个类映射两个表 - 如何在两个表上持久化一个对象?
[6] Hibernate Annotation for Entity 存在于超过 1 个目录中