@manytoone jpa 保存问题 - 重复条目

问题描述 投票:0回答:1

场景:

假设我有一个 springboot jpa 应用程序:

public class Home {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long homeId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "ownerId")
    private Owner owner;

    // attributes & other methods
} 

public class Owner {
    private String ownerId;         // not auto-generated
    // attributes and methods
}

发生的事情是我可以使用我的 springboot 应用程序保存第一个 Home (和所有者,如果不在 mysql 数据库中):

所以类似: homeRepository.save(myhome); // myhome 是一个填充了值的 home 对象

现在的问题是,当我尝试为同一个所有者保存另一个房屋时,它会抛出异常:

org.springframework.dao.DataIntegrityViolationException:无法执行语句[键“owner.PRIMARY”的重复条目“741202”] [插入....

所以它基本上告诉我的是,当尝试保存“新家”时,它看到所有者已经存在并且无法执行插入,因为这将是重复的主要违规。

我在网上搜索了一些关于@manytoone、jpa、双向、更改似乎已弃用的cascade.save_update等解决方法的帮助,但没有运气。

如有任何建议,我们将不胜感激。

java spring-boot jpa many-to-one
1个回答
0
投票

我认为应该避免将 CascadeType.ALL 与 @ManyToOne 一起使用,因为将子记录的更改广播到其父记录是没有意义的。您的保存问题也来自 CascaseType.ALL。

我建议您应该禁用级联并通过其自己的存储库类手动执行对“所有者”的更改(如果需要),然后继续“主页”保存操作。

© www.soinside.com 2019 - 2024. All rights reserved.