为什么每次保存父对象时子实体都会在数据库中重复

Why children entities are duplicated in DB everytime i save parent object

我有实体 "ZakladProdukcyjny" 和 "MiejsceProwadzeniaDzialnosci"。 有一个单向关系 @OneToMany 与一个连接 table.

@OneToMany(fetch = FetchType.LAZY,  cascade = CascadeType.ALL, orphanRemoval = true)
   @JoinTable(name = "ZAKLAD_PRODUKCYJNY_MIEJSCE_PROWADZENIA_DZIALALNOSCI",
           joinColumns = {
              @JoinColumn(name = "zakladProdukcyjny_ID")},
           inverseJoinColumns = {
              @JoinColumn(name = "miejsceProwadzeniaDzialalnosci_ID")})
   private List<MiejsceProwadzeniaDzialalnosci> miejscaProwadzeniaDzialalnosci = new ArrayList<>();

我正在使用 Spring JPARepositories

public interface ZakladProdukcyjnyRepository extends JpaRepository<ZakladProdukcyjny, Long>,

每次我用 zakladProdukcyjnyRepository.save(zakladProdukcyjny) 保存父实体时,子实体都被保存到数据库中,所以每次在 JPARepository 上执行保存时我都会有重复的条目。

子实体使用 lombok 生成 equals 和哈希码。

@EqualsAndHashCode(callSuper=false)
public class MiejsceProwadzeniaDzialalnosci extends BaseEntity {

我不知道这里有什么问题。

这应该早就解决了:

https://hibernate.atlassian.net/browse/HHH-5855

https://hibernate.atlassian.net/browse/HHH-6776

尝试将 List 更改为 Set 或删除 CascadeType.ALL 并仅保留 CascadeType.MERGE

我已经解决了问题。问题是 equals 功能。我在代码中的某处:

    for (MiejsceProwadzeniaDzialalnosci mpd : uaktualnioneMiejscaProwadzeniaDzialalnosciZBDO) {
        if (!(zaklad.getMiejscaProwadzeniaDzialalnosci().contains(mpd))) {
            zaklad.getMiejscaProwadzeniaDzialalnosci().add(mpd);
        }
    }

覆盖 equals 方法后没有重复。