4

私はこのクラス Person を2つのテーブルにマッピングしています: 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>

このオブジェクトを次のように 2 つのテーブルに保存しようとしています。

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 

インスタンスが1つしかないため、Sessionはinsertを1回だけ呼び出します。1つの一意の識別子を持つ1つのオブジェクト。それは以外のものとして評価することはできません。

そして、同じことが動的モデルでも起こっています。挿入後はHashMap を観察してください。そのインスタンスが(人$type$として)どのように評価されるかを示すキー" "が必要です。それは他のものとして機能することはできません。

推奨される解決策:

1つのセット情報を2つのテーブルに保存する必要がある場合は、ORMスタイルをより重視してください。たとえばclonenew HashMap()2つの独立したエンティティに保存します

于 2012-11-19T05:48:09.710 に答える
0

2番目のマッピングでこれを変更します

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

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