簡體   English   中英

休眠+春季+保持一對一關系+空外鍵

[英]Hibernate + Spring + persist one-to-one relation + empty foreign key

我試圖與Spring 1.2.8Hibernate 3.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>

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 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(也更改為級聯為persist)
  • 將saveOrUpdate包裝在session.beginTransaction()和session.getTransaction()。commit()中

但是到目前為止,我還沒有運氣。

從ClientDomain到度量,您之間存在一對多的關系。 但是,從Measurement到ClientDomain,您之間存在一對一的關系。

使Measurement與ClientDomain之間的關系成為多對一關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM