一尘不染

将两个相同的表(相同的架构…)映射到Hibernate中的相同实体

hibernate

我的table1和table2具有相同的架构…,我只想拥有一个实体,而不是两个(因为字段将是相同的)。在XML映射的hibernate状态下,我将如何实现这一点。所以我的目标是当我在DAO中进行查询时,如果两个表都映射到同一实体,它将如何知道要从哪个表中提取。

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

谢谢


阅读 221

收藏
2020-06-20

共1个答案

一尘不染

抱歉回复晚了。我已经在stackoverflow上回答了几次这个问题。


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

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

例如,要将单个类Order映射到Order和OrderHistory表,请创建一个映射文件,该文件使用new entity- namesOrderOrderHistory)将订单类映射到两个表,如下所示:

<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方法:

_session.Save("Order", myOrder)

要么

_session.Save("OrderHistory", myOrder)

很简单,不是吗?

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

2020-06-20