Объединенная таблица по двунаправленным отношениям ManyToMany не заполняется - Java Spring
Привет,
У меня двунаправленное отношение ManyToMany между двумя таблицами ("продукты" и "категории"). Я уже добавил Продукты в базу данных, каждый с пустым списком "категорий". Когда я сейчас пытаюсь заполнить "категории" полным списком продуктов, я заметил, что JoinedTable не обновляется, если JoinedTable не создан в классе Category.
Я думал, что в двунаправленном отношении не должно быть различий, независимо от того, как вы заполняете базу данных, и JoinedTable должен обновляться с обеих сторон. Буду признателен, если кто-нибудь сможет объяснить, является ли это ожидаемым поведением и почему.
@Entity
@Table(name = "categories")
public class Category implements Serializable {
private long id;
private String name;
private List<Product> products;
@Entity
@Table(name = "products")
public class Product implements Serializable {
private Long id;
private String name;
private List<Category> categories;
- Рабочий пример
Когда я заполняю "Категории", JoinedTable корректно обновляется.
Category.java
@ManyToMany()
@JoinTable(name = "product_category",
joinColumns = @JoinColumn(name = "category_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"))
public List<Product> getProducts() {
return this.products;}
Product.java
@ManyToMany(mappedBy = "products", targetEntity = Category.class)
public List<Category> getCategories() {
return this.categories;}
- Не рабочий пример
Когда я заполняю "категории", JoinedTable не обновляется. Однако я могу получить доступ к спискам с продуктами и категориями из обоих классов.
Categoty.java
//I tried adding CascadeType.ALL however this didn’t fix the issue
@ManyToMany(mappedBy = "categories", targetEntity = Product.class)
public List<Product> getProducts() {
return this.products;}
Product.java
@ManyToMany(targetEntity = Category.class)
@JoinTable(name = "product_category",
joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id"))
public List<Category> getCategories() {
return this.categories;}