简体   繁体   English

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

[英]One to Many relation in jpa, always null in foreign key

I have some problem with relations in hibernate jpa. 我在休眠JPA中有一些关系问题。 I'd like to make OneToMany relation but when i save object "one" in base then in table "many" column contains foreign key is always null. 我想建立OneToMany关系,但是当我在对象中保存对象“ one”时,在表“ many”中包含外键的列始终为null。 In my case i have class Customer : 就我而言,我有Customer类:

@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;

It contains OneToMany relation with Order (which works perfect). 它包含与Order的 OneToMany关系(效果很好)。 Order class: 订单类别:

@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;

Order class contains Cart (OneToOne): 订单类包含购物车 (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;

Here is addCartItem method in Cart class: 这是Cart类中的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();
}

And here we are, Cart has to contain CartItem map in OneToMany relation which doesn't work. 在这里, 购物车必须在OneToMany关系中包含CartItem映射,这是行不通的。 CartItem class: 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;

As far as i know I need to initiate foreign key in CartItem , i tried to do it in addCartItem method but when i do so, there is StackOverflowError. 据我所知,我需要在CartItem中初始化外键,我试图在addCartItem方法中进行初始化,但是当我这样做时,出现了StackOverflowError。 Did I miss something or how to initiate CartItem with Cart ? 我错过了什么或如何与启动CartItem?

The solution is here: Json (fasterxml) stackoverflow exception 解决方案在这里: Json(fasterxml)stackoverflow异常

The issue was in parsing my entities in REST controller and you need to use @JsonIgnore. 问题在于在REST控制器中解析我的实体,您需要使用@JsonIgnore。 That is all what spend me so much time -.- 这就是花我很多时间的全部-.-

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM