gpt4 book ai didi

java - hibernate : reuse the same foreign key if x. 等于(y)

转载 作者:行者123 更新时间:2023-12-01 04:34:23 25 4
gpt4 key购买 nike

让我们以这两个实体为例:

城市:

<class name="City" table="city">
<id name="id" column="id"/>
<property name="city_name" column="city_name"/>
<property name="country_name" column="country_name"/>
</class>

人:

<class name="Person" table="person">
<id name="id" column="id"/>
<property name="name" column="name"/>
<many-to-one cascade="save-update" name="city" column="city_id" class="City"/>
</class>

City.equals()实现返回true如果两者city_namecoutry_name是一样的。

如果我保存两个Person在一次 session 期间:

Person person1 = new Person("Peter");
Person person2 = new Person("John");

City city1 = new City("Paris", "France");
City city2 = new City("Paris", "France");

person1.setCity(city1);
person2.setCity(city2);

session.save(person1);
session.save(person2);

Hibernate 将产生以下记录:

城市:

| id |  name  | city_id |
-------------------------
| 1 | Peter | 1 |
| 2 | John | 2 |

人:

| id |  city_name | country_name |
----------------------------------
| 1 | Paris | France |
| 2 | Paris | France |

但是我可以告诉 Hibernate 重用相同的 city_idpersoncityX.equals(cityY)

编辑:

我应该澄清一下city1不能与city2相同的实例。为了简洁起见,我无法描述我面临的完整问题。在实际情况下,表可以包含重复的元素,我只是想通过对某些特定元素进行分组来节省一些空间。谢谢!

最佳答案

创建单个 City 对象并将相同的对象分配给两个实体。您需要首先保留此 City 对象,以便与现有对象建立关联。

这里有一个问题。

由于您为两个 Person 实例分配了相同的值,因此级联实际上不应完成,但如果在删除 City 后它将成为孤儿,则应删除 Person

在您的特定情况下,由于您正在处理城市,因此包含许多城市的现有表可能是一个不错的选择,可以让您将预先存在的城市分配给新人,以防您想创建第三个 Person删除 PeterJohn 后的 Paris 中。

关于java - hibernate : reuse the same foreign key if x. 等于(y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531389/

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