双向关系中的实体更新会导致循环错误

时间:2018-12-08 13:02:09

标签: jackson jhipster

我在实体购物篮和ProductOrder之间存在双向的OneToMany关系。

@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添加到购物篮并在购物篮上调用update方法时。正在创建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并引用购物篮。但是,当我尝试从前端的购物篮中记录产品时,会得到null,这很奇怪,因为方法

 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

好的,我重新启动了负责这些实体的产品微服务,现在一切正常。我不知道我必须重新启动它,但这很高兴知道。

0 个答案:

没有答案