仅知道父@NaturaId来更新子实体。 SpringData JPA

时间:2019-01-10 09:34:58

标签: java hibernate jpa spring-data-jpa

当父项在桌子上时,我试图更新或插入子项实体。 但是我没有父实体的ID 只有一个名称。 在父表上,我有两个ID约束PK和名称唯一约束。

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Parent{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NaturalId
    private String name;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Child> childrens;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Parent)) return false;
        Parent that = (Parent) o;
        return Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return 31;
    }
}

子表

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Child{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(unique = true)
    private String name;

    private String description;
}

然后通过将SpringData与JpaRepository结合使用,我想使用保存方法parentRepository.save(List<Parent> parents)插入新的子项。 当我添加新数据时,它仅在首次保存时起作用-父母与孩子在一起。但是当我想更新新孩子的父母时,我得到了例外: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "parent_parent_name_key"。密钥(名称)=(某些名称)已存在。 我使用POSTGRESQL

有没有办法配置它?或只有一种解决方案是按名称加载所有Parents,然后更新java对象上的所有内容

0 个答案:

没有答案