0

У меня есть связанные таблицы: products и menus и profiles. Связь - Many-to-Many соответственно в одном меню может быть много продуктов, и продукт может быть в одном меню, так же у одного профиля может быть много меню, и одно меню может быть у многих пользователей.

Связь со стороны Menu с Product

@ManyToMany(
        fetch = FetchType.EAGER,
        cascade = CascadeType.ALL
)
@JoinTable(
        name = "menu_products",
        joinColumns = @JoinColumn(name = "menu_id"),
        inverseJoinColumns = @JoinColumn(name = "product_id")
)
private List<Product> products;

Связь со стороны Product с Menu

@ManyToMany(mappedBy = "products")
private List<Menu> menus;

Связь со стороны Menu с Profile

@ManyToMany(mappedBy = "menus")
private List<Profile> profiles;

Связь со стороны Profile с Menu

@ManyToMany(
        fetch = FetchType.EAGER,
        cascade = CascadeType.ALL
)
@JoinTable(
        name = "profile_menus",
        joinColumns = @JoinColumn(name = "profile_id"),
        inverseJoinColumns = @JoinColumn(name = "menu_id")
)
private List<Menu> menus;

Я уже что только не делал. Постоянно идет жалоба, что сущности связанны внешним ключом. При чем связи в menu_products удаляется, а вот в profile_menus и menus ничего не происходит.

Сам код который удаляет сущность.

@PostMapping("/deleteMenu")
public String deleteMenu(
        @AuthenticationPrincipal User user,
        @RequestParam(name = "id") Long id
) {
    Menu menu = menuRepository.findById(id).get();
    for (Product product : menu.getProducts()) {
        product.getMenus().remove(menu);
        productRepository.save(product);
    }
    menu.getProducts().clear();
    menu.getProfiles().clear();
    user.getProfile().getMenus().remove(menu);
    profileRepository.save(user.getProfile());
    menuRepository.delete(menu);
    return "redirect:/menu";
}

Так же в дебаггере в переменной Profile красным пишет: Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception. Хотя везде EAGER.

Mr.Bere
  • 87
  • Похожа проблема была у меня, решилось тем что сделал все связи lazy. Но если существенно чтобы они были eager - тогда не знаю – skeeph May 25 '20 at 13:55
  • С Lazy оно к сожалению в принципе не работает, мне нужно выгружать профиль и меню сразу же. – Mr.Bere May 25 '20 at 14:05
  • Посмотрите вот тут ответ - https://ru.stackoverflow.com/q/993198/275232 – Antonio112009 May 26 '20 at 14:17
  • Вам помог мой ответ? – Antonio112009 May 26 '20 at 16:51
  • К сожалению нет, дело решилось немного костылями. Постараюсь потом выложить решение. – Mr.Bere Jun 17 '20 at 20:33

1 Answers1

0

Проблема была со стороны view, приходили объекты не в том состоянии которое ожидалось.

Mr.Bere
  • 87