java - Spring JPA : OneToMany List update results in duplicate entries

标签 java spring jpa spring-data-jpa

我有以下 JPA 表。我使用了单向 OneToMany 关系。

@Entity
@Table(name = "xxx")
public class Parent {
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
   @JoinColumn(name = "Child_ID")
   private Set<Child1> child;

   //getter setters

}

@Entity
@Table(name = "xxx")
public class Child {
   //other colmns

   //getter setters

}

当我第一次将条目添加到上面的父集(比如 20)和 save() 时,它成功保存到数据库。 然后在同一组中我又添加了 10 个并调用了 save 方法。它节省了 10 个新的数据库。如果我再次调用 save,它会再次向数据库中添加相同的 10 个条目,从而创建重复的条目。

Parentrepository.save(parentObject);

最佳答案

只需在子实体中生成有效的主键,即

@Id
@Column(name = "child_name")
private String name;

并重写@Equals和@HashCode方法:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Child )) return false;
    return name != null && name.equals(((Child) o).name);
}
@Override
public int hashCode() {
    return Objects.hashCode(this);
}

关于java - Spring JPA : OneToMany List update results in duplicate entries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294485/

相关文章:

java - SQL 语句应该返回 2 行,但只返回 1 行

java - 无法在 Angular 6 中将对象发送到 REST API

java - 从 Java 应用程序中执行 Pig

Java返回空列表而不是对象

java - JOptionPane 和读取整数 - 初学者 Java

java - 使用 Eclipse 连接到网络

java - 延迟来自客户端的并发请求,直到创建 HttpSession

java - GET 请求的 Spring 注解

java - Hibernate JPA、Spring MVC 和 LazyInitializationException

jakarta-ee - @ApplicationScoped CDI bean 和 @PersistenceContext - 这安全吗?