前言:
即使在SO上,这也是一个被广泛问到的问题,而且答案也与实际方法相关或实际方法(例如[1Subclass
SuperClass
])
实际答案:
在这些帖子[2],[3]中,他们建议使用带有参数的xml映射。EntityName
因此,使用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] 如何使用休眠/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] 存在于多个目录中的实体的休眠注释