我有这个类Person映射两个表:Persons和PersonsAUD(audit):
<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);
但只插入第一行,而不是审计行;可能是休眠检查人的状态并确认已经保存。
是否有机会强制hibernate在两个表中保存相同的对象?
提前致谢。
答案 0 :(得分:1)
我强烈建议不要这样做。这非常令人困惑。而且不仅仅是为了Hibernate而且它可能会给你带来更多问题(其他开发人员)。为了更清楚,请让我们尝试在POJO实体中考虑该问题(不是动态模型)
Person person = new Person();
// fill properties
session.save(person); // as a person
session.save(person); // as a person audit
Session只会调用一次插入,因为只有一个实例。一个具有一个唯一标识符的对象除了人之外,它不能被评估为其他任何东西。
动态模型也是如此。插入后,请尝试观察HashMap
人。应该有一个键“$type$
”,它应该告诉您该实例是如何评估的(作为人)。它不能起到任何其他作用。
如果您需要将一组信息保存到两个表中,请使用ORM样式的更多方向。例如。将{em>人 clone
导入new HashMap()
并保存两个独立实体
答案 1 :(得分:0)
在你的第二个映射中 改变这个
<id name="idAudit" type="int">
到
<id name="id" type="int">