Обновление сущностей в двунаправленных отношениях вызывает циклическую ошибку - PullRequest
0 голосов
/ 08 декабря 2018

У меня двунаправленное отношение OneToMany между корзиной Entite и ProductOrder.

@OneToMany(mappedBy = "basket", cascade = CascadeType.ALL)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<ProductOrder> products = new HashSet<>();

и

@ManyToOne
@JsonIgnoreProperties("products")
private Basket basket;

Когда я добавляю новый productOrder в корзину и вызываю метод обновления длякорзина.ProductOrder создается, но не получает ссылку на корзину, в результате чего корзина не имеет productOrders!

Я попытался установить корзину из productOrder, но затем она заканчивается в бесконечном круге, и я получаю:

ОШИБКА TypeError: Преобразование круговой структуры в JSON

Итак, мой вопрос, как обрабатывать двунаправленные отношения в jhipster?

Вот как я хотел бы обновить свою корзину:

test-component.ts

intoBasket(product, amount) {
    this.productOrder = new ProductOrder();
    this.productOrder.product = product;
    this.productOrder.amount = amount;
    this.basketService.find(+this.account.id).subscribe((res: HttpResponse<Basket>) => {
        this.basket = res.body;
        this.productOrder.basket = this.basket;
        this.basket.products.push(this.productOrder);  
        this.basketService.update(this.basket).subscribe((res: HttpResponse<Basket>) => {
        console.log("test");
        });  
    });      
}

спасибо!

Обновление

Я переместил некоторую логику с внешнего интерфейса на внутренний:

BasketService.java

public Basket save(Basket basket) {
    log.debug("Request to save Basket : {}", basket);
    log.info(basket.getProducts().toString());
    basket.getProducts().stream().forEach(p -> p.setBasket(basket));

    return basketRepository.save(basket);
}

это правильно сохраняет ProductOrders со ссылкой на корзину.Но когда я пытаюсь зарегистрировать товары из корзины во внешнем интерфейсе, я получаю нулевое значение, что является странным, поскольку метод

 this.basketService.update(this.basket).subscribe((res: HttpResponse<Basket>) => {
    console.log(res.body.products);
    });  

фактически возвращает корзину, заполненную новым продуктом.Но, похоже, это не спасает его, потому что когда я запрашиваю эту конкретную корзину "/ baskets / 39", в ответе пропускаются товары:

{id: 39, totalPrice: 0, customerId: 39, products: null}

Обновление 2

хорошо, я перезапустил микросервис продукта, который отвечает за эти объекты, и теперь все работает нормально.Я не знал, что мне пришлось его перезапустить, но это приятно знать, наверное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...