外键未使用OneToMany更新

时间:2015-07-25 15:57:54

标签: java mysql hibernate foreign-keys one-to-many

我对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以某种方式去做吗?

任何人都可以告诉我这里有什么问题吗? 感谢

0 个答案:

没有答案