为什么每次保存父对象时子实体都会在数据库中重复
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 方法后没有重复。
我有实体 "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 方法后没有重复。