Java 冬眠+;弹簧&x2B;坚持一对一的关系+;空外键

Java 冬眠+;弹簧&x2B;坚持一对一的关系+;空外键,java,hibernate,spring,Java,Hibernate,Spring,我试图保持Spring1.2.8和Hibernate3.2.7ga之间的一对一关系,但是外键总是空的 首先让我简单介绍一下: 我有两个实体称为“ClientDomain”(Web域)和“Measurement” 休眠映射文件: ClientDomain.hbm.xml: <hibernate-mapping package="statistics.jobs.domain"> <class name="ClientDomain" table="domains" lazy="fa

我试图保持Spring1.2.8和Hibernate3.2.7ga之间的一对一关系,但是外键总是空的

首先让我简单介绍一下:

我有两个实体称为“ClientDomain”(Web域)和“Measurement”

休眠映射文件:

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>
<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>
public void insertMeasurement(Measurement measurement) {    
  getHibernateTemplate().saveOrUpdate(measurement);
}
插入测量(测量测量):

<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>
<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>
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(也将级联更改为persist)
  • 在session.beginTransaction()和session.getTransaction().commit()中包装saveOrUpdate

但到目前为止,我没有运气。

从ClientDomain到measurement,你有一对多的关系。但是,从度量到ClientDomain是一对一的关系


将度量值与ClientDomain之间的关系设置为多对一关系。

从ClientDomain到度量值之间存在一对多关系。但是,从度量到ClientDomain是一对一的关系


将测量中与ClientDomain的关系设置为多对一关系。

非常感谢。这就成功了。回想起来,我对自己有点生气,因为这是相对明显的:(这是可以理解的,使用hibernate它可以做很多事情,包括显而易见和不那么显而易见的事情。我想我花了大约两天的时间试图弄清楚完全相同的问题。在我学习的时候,你很聪明,在你花太多时间之前问了我。祝你好运!非常感谢。这就成功了。回头看,我有点生气在我自己身上,因为这是相对明显的:(虽然可以理解,使用hibernate它可以做很多事情,包括明显的和不明显的事情,我想我花了大约2天的时间试图找出完全相同的问题,当我在学习时,你足够聪明,在你花太多时间之前问了。祝你好运!