Hibernate + Spring + постоянное отношение один к одному + пустой внешний ключ - PullRequest
1 голос
/ 16 ноября 2009

Я пытаюсь сохранить отношение «один к одному» с Spring 1.2.8 и Hibernate 3.2.7ga , но внешний ключ всегда пуст.

Но позвольте мне сначала дать вам краткое введение:

У меня есть две сущности: «Клиентский домен» (веб-домен) и «Измерение».

Файлы отображения 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 |
+----+---------+-----------+---------------------+--------+

Я уже проверил правильность экземпляра домена. Все так, как и должно быть.

Так что я делаю не так? Почему внешний ключ домена не сохраняется вместе с измерением?

Что я пробовал до сих пор:

  • вызов сохранен вместо saveOrUpdate (также изменен каскадно для сохранения)
  • упаковка saveOrUpdate в session.beginTransaction () и session.getTransaction (). Commit ()

Но пока мне не повезло.

1 Ответ

1 голос
/ 16 ноября 2009

У вас есть отношение «один ко многим» от ClientDomain к измерению. Но у вас есть взаимно-однозначное отношение от Измерения до ClientDomain.

Сделайте отношение в Measurement to ClientDomain отношением многие-к-одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...