gpt4 book ai didi

java - Hibernate + Spring + 持久一对一关系 + 空外键

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:50 24 4
gpt4 key购买 nike

我试图保持与 Spring 1.2.8 和 Hibernate 3.2.7ga 的一对一关系,但外键始终为空。

首先让我给您做一个简短的介绍:

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

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

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

最佳答案

您有从 ClientDomain 到测量的一对多关系。但从Measurement 到ClientDomain 存在一对一的关系。

使Measurement 中与ClientDomain 的关系成为多对一关系。

关于java - Hibernate + Spring + 持久一对一关系 + 空外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com