4

我有这个类 Person 映射两个表:Persons 和 PersonsAUD(审计):

 <class catalog="test" name="test.Person" table="Persons" entity-name="Person">
    <id name="id" type="int">
      <column name="Id"/>
      <generator class="increment"/>
    </id>
    <property name="name" type="string">
      <column length="30" name="Name" not-null="true"/>
    </property>
    ...    

  </class>

  <class catalog="test" name="test.Person" table="PersonsAUD" entity-name="PersonAUD">

    <id name="idAudit" type="int">
      <column name="IdAudit"/>
      <generator class="increment"/>
    </id>      

    <property name="name" type="string">
      <column length="30" name="Name" not-null="true"/>
    </property>
    <property name="action" type="string">
      <column length="10" name="Action" not-null="true"/>
    </property>
    ...
  </class>

我正在尝试将此对象保存在两个表中,如下所示:

session.save("Person", person);
session.save("PersonAUD", person);

但只插入第一行,不插入审计行;可能休眠检查该人的状态并确认已保存。

有没有机会强制休眠在两个表中保存同一个对象?

提前致谢。

4

2 回答 2

1

我强烈建议不要这样做。这非常令人困惑。不仅对 Hibernate,而且以后它可能会给您(其他开发人员)带来更多问题。为了更清楚,请让我们尝试在 POJO 实体(不是动态模型)中考虑这个问题

Person person = new Person();
// fill properties
session.save(person); // as a person
session.save(person); // as a person audit 

会话将只调用一次插入,因为只有一个实例。一个具有一个唯一标识符的对象。除了一个人之外,它不能被评价为其他任何东西。

您的动态模型也是如此。插入后尝试观察您的HashMap 人。应该有一个键“ $type$”,它应该告诉您该实例是如何评估的(作为一个)。它不能充当其他任何东西。

建议的解决方案:

如果您需要将一组信息保存到两个表中,请更倾向于 ORM 样式。例如clone放入new HashMap()并保存两个独立的实体

于 2012-11-19T05:48:09.710 回答
0

在你的第二个映射中改变这个

<id name="idAudit" type="int">

<id name="id" type="int">
于 2012-11-18T18:49:31.237 回答