有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

OrderItem(order\u orderID)中的java Hibernate外键为空

我有两个表OrdersOrderItem,如下所示:

@Entity
@Table(name = "orders")
public class Order implements Serializable {

@Id
@GeneratedValue
private Integer orderID;
@Column(nullable = false)
private Date orderDate;
@ManyToOne(cascade = CascadeType.ALL)
private User user;

@OneToMany(cascade = CascadeType.ALL)
private Set<OrderItem> orderItems = new HashSet<OrderItem>();

public Order() {
}

public Order(Date orDate, User currentUser) {
    this.orderDate = orDate;
    this.user = currentUser;
}

public Set<OrderItem> getOrderItems() {
    return orderItems;
}

public void setOrderItems(Set<OrderItem> orderItems) {
    this.orderItems = orderItems;
}

//getter/setters for orderDate, user

@Entity
public class OrderItem implements Serializable {

@Id
@GeneratedValue
private Integer id;
@ManyToOne(cascade = CascadeType.ALL)
private Book book; // F.K to Book table
@Column(nullable = false)
private int quantity;
@Column(nullable = false)
private double totalPrice;

public OrderItem() {}
public OrderItem( Book currentBook, int qty, double totalPrice) {
    this.book = currentBook;
    this.quantity = qty;
    this.totalPrice = totalPrice;
}
//getter/setters

在这里,我将它们初始化为存储在数据库中:

@Transactional
public void storeOrderInDB() {

    order = new Order(currentDate(), currentUser); //date,user
    orderService.addOrder(order);

    OrderItem orderItem = new OrderItem();
    orderItem.setBook(currentBook);
    orderItem.setQuantity(qty);
    orderItem.setTotalPrice(getTotalCost(qty, unitPrice));

    orderItemService.addOrderItem(orderItem);
}

结果是:

Orders

OrderID: 5, OrderDate: "2015-04-25 23:11:16", userId: 1

OrderItem

id:2 , quantity:1 , totalPrice:5000 , bookId:5 , order_orderID: null

为什么order-orderIDnull

我需要它不为空


共 (1) 个答案

  1. # 1 楼答案

    Order Entity中,您已声明

    @OneToMany(cascade = CascadeType.ALL)
    private Set<OrderItem> orderItems = new HashSet<OrderItem>();
    

    上述声明表示您的外键由订单实体维护, 来解决你的问题

    @Transactional
    public void storeOrderInDB() {
    
    Order order = new Order(currentDate(), currentUser); //date,user
    
    OrderItem orderItem = new OrderItem();
    orderItem.setBook(currentBook);
    orderItem.setQuantity(qty);
    orderItem.setTotalPrice(getTotalCost(qty, unitPrice));
    //orderItemService.addOrderItem(orderItem);
    Set<OrderItem> orderItemSet=order.getOrderItems();
    orderItemSet.add(orderItem);
    order.setOrderItems(orderItemSet);
    orderService.addOrder(order);
    }
    

    希望这能解决你的问题 谢谢