Объединенная таблица по двунаправленным отношениям 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;
  1. Рабочий пример

Когда я заполняю "Категории", 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;}
  1. Не рабочий пример

Когда я заполняю "категории", 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;}

0 ответов

Другие вопросы по тегам