Spring Data Jpa Spring数据-插入主实体时强制合并多对一元素

yqlxgs2m  于 2023-01-02  发布在  Spring
关注(0)|答案(1)|浏览(128)

所以我有一个有点烦人的数据库布局,我必须有一个动态的列表边表,它使用一个自然键,如果第二个表还不存在,它应该得到一个新的实体,否则更新。
所以要说:
| 公民|城市|
| - ------|- ------|
| 身份证|代码|
| 邮政编码|姓名|
公民实体具有

@ManyTone(cascade = javax.persistence.CascadeType.ALL)
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "postal_code"
private City city;

现在,当我创建一个新的CitizenCity示例,并插入它们时,第一次工作正常。但是,第二次我得到了一个城市的PK违规,因为已经有一个城市具有给定的代码。现在,我想要实现的是,当公民被保存时,城市也被保存或更新。(这不是我所知道的最好的例子)
为了保持,我使用了'JpaRepository -〉saveAll'方法。
最坏的情况当然我可以先持久化所有的城市,然后在市民上设置持久化的示例,但是我想避免这种情况。
要创建/更新的边实体,无需首先手动插入。

f5emj3cl

f5emj3cl1#

我认为您需要在持久化一个新的Citizen之前验证该城市是否存在,如果它存在,您需要使用从数据库中获取的对象设置City属性。
否则,它将尝试使用相同的密钥持久化一个新的城市,并抛出PK违规错误。

相关问题