1
我试图坚持一个一对一的关系与春1.2.8和休眠3.2.7ga但外键总是空。休眠+春+持续一到一个关系+空的外键
但是,让我先给你一个简短的介绍:
我有两个实体称为“ClientDomain”(网域)和“测量”。
Hibernate映射文件:
ClientDomain.hbm.xml:
<hibernate-mapping package="statistics.jobs.domain">
<class name="ClientDomain" table="domains" lazy="false">
<id column="id" name="id" type="int">
<generator class="native"/>
</id>
<property name="version" not-null="false"/>
<property name="url"/>
<property name="etrackerApiUser" column="etracker_api_user"/>
<property name="etrackerApiKey" column="etracker_api_key"/>
<property name="etrackerUsername" column="etracker_username"/>
<property name="etrackerPassword" column="etracker_password"/>
<set
name="measurements"
table="measurements"
lazy="false"
cascade="merge,save-update"
inverse="true">
<key column="domain" />
<one-to-many class="Measurement"/>
</set>
</class>
</hibernate-mapping>
Measurement.hbm.xml:
<hibernate-mapping package="statistics.jobs.domain">
<class name="Measurement" table="measurements" lazy="false">
<id column="id" name="id" type="int">
<generator class="native"/>
</id>
<property name="version" not-null="false"/>
<property name="time" type="java.util.Date"/>
<property name="numberOfDocuments" column="documents"/>
<one-to-one
name="domain"
class="ClientDomain"
cascade="merge,save-update"
/>
</class>
</hibernate-mapping>
我收到来自不同来源的一些统计数据为一个域,然后想坚持他们。这样我就有了一个域的历史。
ClientDomain对象已经存在。
测量对象被创建像这样:
Measurement measurement = new Measurement();
measurement.setDomain(domain);
measurement.setTime(new Date());
measurement.setNumberOfDocuments(22222);
measurementManager.insertMeasurement(measurement);
insertMeasurement(测量测量):
public void insertMeasurement(Measurement measurement) {
getHibernateTemplate().saveOrUpdate(measurement);
}
这是结果:
+----+---------+-----------+---------------------+--------+
| id | version | documents | time | domain |
+----+---------+-----------+---------------------+--------+
| 82 | NULL | 22222 | 2009-11-16 14:28:32 | NULL |
| 83 | NULL | 22222 | 2009-11-16 14:28:33 | NULL |
| 84 | NULL | 22222 | 2009-11-16 14:28:34 | NULL |
+----+---------+-----------+---------------------+--------+
我已经检查是否该域实例是正确的。一切都是应该的。
那么我做错了什么?为什么域外键不能与度量一起保存?
我试过到目前为止:
- 调用persist,而不是saveOrUpdate(也改变了级联坚持)
- 包裹saveOrUpdate在session.beginTransaction()和session.getTransaction()提交(。 )
但是到目前为止我没有运气。
非常感谢。那就是诀窍。回想起来,我有点生气,因为这是相对明显的:( – Jens 2009-11-16 14:07:44
它可以理解,但休眠它可以包括任何数量的东西,包括明显的和不太明显的,我想我花了大约2天试图找出确切同样的问题,当我学习时,你很聪明,在你花费太多时间之前问你,祝你好运! – Zoidberg 2009-11-16 14:32:38