Дубликат ключевого значения Spring Boot Hibernate нарушает уникальные ограничения во многих для многих Сохранить - PullRequest
0 голосов
/ 10 апреля 2020

A. java:

@Entity
public class A {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Type(type = "uuid-char")
    private UUID id;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "a_b",
            joinColumns = @JoinColumn(name = "a_id"),
            inverseJoinColumns = @JoinColumn(name = "b_id"))
    public Set<B> bs;

...
}

B. java:

@Entity
public class B {

    @Id
    @NotNull
    private String bId;

    @ManyToMany(mappedBy = "bs")
    private Set<A> as;
...
}

AService. java:

...
public void save(A a) {
    aRepository.save(a);
}
...

Оба A и сущности B сохраняются, когда я создаю A, у которого есть набор B. Однако, он выдает ошибку во второй раз:

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "b_pkey"
  Detail: Key (b_id)=(2) already exists.

То, что я пытаюсь сделать, это при создании сущности A (без с полями идентификатора, заполненными мной), который имеет набор B (с полями идентификатора, заполненными мной):

Создание B, если еще нет записи для B, и не создавать, если уже существует с данным id.

Как этого добиться?

...