我对Order Order和Order Items有一个简单的OneToMany关系,其中Order包含OrderItems列表,我需要将Order和OrderItems保存到相应的DB表中。 OrderItems表具有Orders表的外键(名为ORDER_ID的列)
我的问题是ORDER_ID列(FK)中的值未使用在ORDERS表中插入的订单ID进行更新,而是将其保留为null
这是Order Entity的相关代码:
@Entity
@Table(name="ORDERS")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ORDER_ID")
private int orderId;
@OneToOne
@JoinColumn(name="MEMBER_ID")
private Member member;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="order")
private List<OrderItem> orderItems;
}
以及ItemOrder的相关代码:
@Entity
@Table(name="ORDER_ITEMS")
public class OrderItem {
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
@OneToOne
@JoinColumn(name="ITEM_ID")
private Item item;
}
N.B:使用OneToOne注释的实体存储正确,没问题 我正在使用带有MySQL的hibernate 4.1.9
编辑: 我发现了问题,实际上是在代码部分填写了enitie:
Member m = new Member();
Order o = new Order();
m.setMemberId(1);
o.setMember(m);
List<OrderItem> l = new ArrayList<OrderItem>();
Item i = new Item();
i.setItemId(2);
OrderItem oI1 = new OrderItem();
oI1.setItem(i);
oI1.setOrder(o); // Adding this line solved the problem
oI1.setQuantity(10);
oI1.setTotal(100);
OrderItem oI2 = new OrderItem();
oI2.setItem(i);
oI2.setOrder(o); // Adding this line solved the problem
oI2.setQuantity(20);
oI2.setTotal(200);
l.add(oI2);
l.add(oI1);
o.setOrderItems(l);
您可以检查注释的行//添加此行解决了问题
我现在的问题:这是强制性的吗?我是否真的需要将Parent添加到Child以及将子列表添加到parent?我不能告诉hibernate以某种方式去做吗?
任何人都可以告诉我这里有什么问题吗? 感谢