如何将2个相同的表(相同的属性)映射到1个实体

时间:2011-03-07 03:19:16

标签: hibernate nhibernate-mapping

请帮我解决这个问题。

我有两张相同的表,一张是时间表,另一张是timetable_bk。这两个表具有相似的属性或字段。现在我想将2个表映射到一个实体类(alltimetable)。

我已经尝试过Inheritance.TABLE_PER_CLASS策略,但是当我使用AllTimetable查询时。什么也没有回报。

请帮帮我。我搜索很多次但还没有得到答案。

最诚挚的问候。

1 个答案:

答案 0 :(得分:3)

要将两个相同的表映射到一个类,您需要使用Hibernate或NHibernate的entity-name属性。文档在这里:

http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname

例如,要将单个Order映射到Order和OrderHistory表,您需要创建一个映射文件,使用新的实体名称将订单类映射到两个表,如下所示:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 <class name="DomainModel.Order, DomainModel"
     table="Orders" entity-name="Order">`  
         <id name="_id" access="field" column="OrderId">
             <generator class="assigned"/>
         </id>
        <property name= ...>
 </class>
 <class name="DomainModel.Order, DomainModel"
     table="OrderHistories" entity-name="OrderHistory">
         <id name="_id" access="field" column="OrderId">
            <generator class="assigned"/>
         </id>
        <property name= ...>
</class>
</hibernate-mapping>

然后,根据您需要的实体类型,您可以调用适当的会话方法:

_session.Save("Order", myOrder) 

_session.Save("OrderHistory", myOrder)

等。通常,entity-name必须在所有Hibernate调用中替换类名。