У меня есть 2 сущности foo
и bar
в отношении n-to-m.
Вот Фу:
@Entity
@Table(name = "foo")
public class Foo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "name")
private String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
@JoinTable(
name = "foo_bars",
joinColumns = {@JoinColumn(name = "foo_name", referencedColumnName = "name")},
inverseJoinColumns = {@JoinColumn(name = "bar_name", referencedColumnName = "name")}
private Set<Bar> bars;
public Foo() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Bar> getBars() {
return bars;
}
public void setBars(Set<Bar> bars) {
this.bars = bars;
}
}
а это Бар:
@Entity
@Table(name = "bar")
public class Bar implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "bar", fetch = FetchType.EAGER)
@JsonIgnore
private Set<Foo> foos;
public Bar() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Foo> getFoos() {
return foos;
}
public void setFoos(Set<Foo> foos) {
this.foos = foos;
}
}
Итак, мое отношение называется foo_bars
со столбцами foo_name,bar_name
.
Как мне обновить строки в foo_bars?
РЕДАКТИРОВАТЬ: например. Как добавить определенный Foo в существующую панель с именем 'xyz'? Моя попытка не сохраняется новая запись foo_bars:
Foo newFoo = new Foo();
newFoo.setName("a new foo");
newFoo.setBars(new HashSet());
Optional<Bar> barOpt = this.barRepository.findByName("xyz");
if (barOpt.isPresent()) {
Bar toUpdate = barOpt.get();
Set<Foo> foos = toUpdate.getFoos();
foos.add(newFoo);
toUpdate.setFoos(foos);
this.barRepository.save(toUpdate);
}