Например, у меня есть две сущности.
@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 работает корректно и сохраняет связь. Итак, мой вопрос, как сделать вид, что этот метод работает правильно и сохранить связь с таблицей соединений?