【问题标题】:Map Two Identical tables ( same schema...) to same entity in Hibernate [duplicate]将两个相同的表(相同的模式...)映射到 Hibernate 中的相同实体 [重复]
【发布时间】:2011-02-14 22:20:05
【问题描述】:

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

我正在尝试不创建父类,然后创建两个子类。

谢谢

【问题讨论】:

  • 更重要的是,它会写入哪个表?
  • 正确,我希望能够读写两个表,使用两个映射文件并且只有一个类。不确定是否有可能。但是说让我问问StackOverflow的专家,看看是否可以在DAO级别或类似的地方指定表。
  • 感谢您的参考。我以前看过这些问题。但它们都使用继承。我试图不使用继承和注释。

标签: java hibernate


【解决方案1】:

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


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

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

例如,要将单个类 Order 映射到 Order 和 OrderHistory 表,您可以创建一个映射文件,使用新的 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 调用中的类名。

【讨论】:

  • 如果我不调用 save 方法并且实体在事务提交时被持久化怎么办?我的意思是我想根据订单类所属的父实体坚持到不同的表。
  • 有没有办法通过注释来做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多