将两个相同的表(相同的模式...)映射到Hibernate中的同一个实体

时间:2011-02-14 22:20:05

标签: java hibernate

我有table1和table2具有相同的模式...我想只有一个实体而不是两个(因为字段将是相同的)。 我如何在使用XML映射的hibernate中实现这一点。 所以我的目标是当我在DAO中查询时,如果两个表都映射到同一个实体,它将如何知道要从哪个表中获取。

我试图不创建父类,然后创建两个子类。

由于

1 个答案:

答案 0 :(得分:6)

对不起,迟到了。我已经在stackoverflow上多次回答了这个问题。


要将两个相同的表映射到一个实体类,您需要使用Hibernate或NHibernate的entity-name属性。

文档在这里: http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname

例如,要将单个Order类映射到Order和OrderHistory表,您需要创建一个映射文件,使用新的entity-namesOrder和{{1}将订单类映射到两个表})像这样:

OrderHistory

然后,根据您需要的实体类型,您只需将相应的Session方法调用为:

<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) 必须在所有Hibernate调用中替换类名。