jpa中的一对多关系,外键中始终为null

时间:2017-08-02 19:32:56

标签: java spring hibernate jpa

我在hibernate jpa中遇到关系问题。我想制作OneToMany关系,但是当我保存对象"一个"在基地,然后在表格"许多" column包含外键始终为null。 在我的情况下,我有班级客户

@OneToOne(fetch=FetchType.LAZY, mappedBy="customer", cascade = CascadeType.ALL)
private Address billingAddress;
@Column(name="phone_address")
private String phoneNumber;
@OneToMany(fetch=FetchType.EAGER, mappedBy="customer")
private List<Order> orders;

它包含与订单的OneToMany关系(完美无缺)。 订单类:

@Id
@GeneratedValue
@Column(name="order_id")
private Long orderId;
@OneToOne(fetch=FetchType.LAZY, mappedBy="order", cascade = CascadeType.ALL)
private Cart cart;
@ManyToOne
@JoinColumn(name="customer_id")
private Customer customer;
@OneToOne(fetch=FetchType.LAZY, mappedBy="order", cascade = CascadeType.MERGE)
private Address shippingDetail;

订单类包含购物车(OneToOne):

@Id
@GeneratedValue
@Column(name="base_id")
private Long baseId;
@Column(name="cart_id")
private String cartId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "cart", cascade = CascadeType.ALL)
@MapKeyColumn(name = "items_keys")
private Map<Long, CartItem> cartItems;
@Column(name="grand_total")
private BigDecimal grandTotal;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
private Order order;

购物车类中的 addCartItem 方法:

public void addCartItem(CartItem item){
    Long productId = item.getProduct().getProductId();

    if(cartItems.containsKey(productId)){
        CartItem existingCartItem = cartItems.get(productId);
        existingCartItem.setQuantity(existingCartItem.getQuantity() + item.getQuantity());
        cartItems.put(productId, existingCartItem);
    }else{
        cartItems.put(productId, item);
        //item.setCart(this);
    }
    updateGrandTotal();
}

我们在这里,购物车必须在OneToMany关系中包含 CartItem 地图,而这种关系并不起作用。 CartItem 类:

@Id
@GeneratedValue
private long id;
@OneToOne(fetch=FetchType.LAZY, mappedBy="cartItem", cascade = CascadeType.MERGE)
private Product product;
private int quantity;
private BigDecimal totalPrice;
@ManyToOne
private Cart cart;

据我所知,我需要在 CartItem 中启动外键,我尝试在 addCartItem 方法中执行此操作但是当我这样做时,会出现StackOverflowError。我是否错过了某些内容或如何使用购物车启动 CartItem

1 个答案:

答案 0 :(得分:0)

解决方案在这里:Json (fasterxml) stackoverflow exception

问题在于在REST控制器中解析我的实体,你需要使用@JsonIgnore。这就是花费我很多时间的所有东西 - .-