Двунаправленный ManyToMany устойчивый ребенок с набором родителей - PullRequest
0 голосов
/ 22 января 2020

Например, у меня есть две сущности.

@Entity
@Table(name = "a")
public class A {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Long id;

    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(
        name = "a_b",
        joinColumns = @JoinColumn(name = "a_id"),
        inverseJoinColumns = @JoinColumn(name = "b_id")
    )
    private Set<B> b = new HashSet<>();

    public void addB(B b) {
        this.b.add(b);
        b.getA().add(this);

    }

    public void removeB(B b) {
        this.b.remove(b);
        b.getA().remove(this);
    }

    public Set<B> getB() {
        return b;
    }

    public void setB(Set<B> b) {
        this.b = b;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

и

@Entity
@Table(name = "b")
class B {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Long id;

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "b")
    private Set<A> a = new HashSet<>();

    public void addA(A a) {
        this.a.add(a);
        a.getB().add(this);
    }

    public void removeA(A a) {
        this.a.remove(a);
        a.getB().remove(this);
    }

    public Set<A> getA() {
        return a;
    }

    public void setA(Set<A> a) {
        this.a = a;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

И у меня есть такой метод обслуживания

public B createB(List<Long> aIds, B b) {
        List<A> a = aRepository.findAllById(aIds);
        b.setA(new HashSet<>(a));
        return bRepository.save(b);
    }

Но проблема в том, что этот метод сохраняется в B Entity, но не сохраняет отношения между A и B, чтобы присоединиться к таблице a_b. В то время как обратный метод для создания сущности с множеством сущностей B работает корректно и сохраняет связь. Итак, мой вопрос, как сделать вид, что этот метод работает правильно и сохранить связь с таблицей соединений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...