假设我有:
-- table_1 -------------------
|id | property_x | data |
------------------------------
-- table_2 ------------------------
|id | property_x | moar_data |
-----------------------------------
这有一个从到table_1
的FK
(为什么不呢?IDK,这个项目已经是这样了:()property_x
table_2.property_x
table_2.id
HBM 如下所示:
<!-- Table 1 -->
<hibernate-mapping package="com.example">
<class name="Table1" table="table_1">
<id column="id" type="integer" name="id">
<generator class="native"/>
</id>
<many-to-one class="Table2" fetch="join" name="table2" not-null="false">
<column name="property_x" />
</many-to-one>
</class>
</hibernate-mapping>
和
<!-- Table 2 -->
<hibernate-mapping package="com.example">
<class name="Table2" table="table_2">
<id column="id" type="integer" name="id">
<generator class="native"/>
</id>
<property column="property_x" name="propertyX" type="string"/>
</class>
</hibernate-mapping>
问题是我想使用 保存一个对象Table1
,session.save(objTable1)
而不是在数据库中创建一个新的 Table2 条目,也不需要加载它。我过去通过创建一个新对象来完成此操作,并且只设置主键值,将其他所有内容留空,并且不让它更新Table2
表,但这不是 PK >_<。
现在,假设我有table_2
一个条目with id=5
, property_x="EX"
。当我执行以下操作时...
// example method
public void saveSomething(Sessions sess) {
Table1 table1 = new Table1();
Table2 table2 = new Table2();
table2.setPropertyX("EX");
table1.setTable2(table2);
sess.save(table1);
}
...它创建了一个新条目,我猜这是因为Table2
未设置 PK(id)。
我的问题是,hibernate 如何决定从 FK 对象在数据库中创建一个新条目?有没有办法在 HBM 文件上避免这种情况?