Hibernate 外键在 OrderItem 中为空 (order_orderID)
Hibernate foreign key is null in OrderItem (order_orderID)
我有两个 table Orders
和 OrderItem
如下:
@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-orderID
是 null
?
我需要它不为空。
在Order Entity
你已经声明了
@OneToMany(cascade = CascadeType.ALL)
private Set<OrderItem> orderItems = new HashSet<OrderItem>();
上面的声明说你的外键是由 Order Entity 维护的,
解决您的问题
@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);
}
希望这能解决您的问题
谢谢!
我有两个 table Orders
和 OrderItem
如下:
@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-orderID
是 null
?
我需要它不为空。
在Order Entity
你已经声明了
@OneToMany(cascade = CascadeType.ALL)
private Set<OrderItem> orderItems = new HashSet<OrderItem>();
上面的声明说你的外键是由 Order Entity 维护的, 解决您的问题
@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);
}
希望这能解决您的问题 谢谢!