我有父实体Order
与子实体OrderItem
。我想将对象Order
和Set<OrderItem>
一起保存,但idOrder
是自动增量。在Order
和OrderItem
之间是一对多的关系。 OrderItem
包括对父母Order
的引用。因此Order
项目必须先保存,然后必须保存OrderItem
并指定idOrder
。如何向孩子保存父母?
这里是Order.hbm.xml
<class name="hibernate.Order" table="order" catalog="my">
<id name="idOrder" type="java.lang.Integer">
<column name="id_order" />
<generator class="identity" />
</id>
<set name="orderItems" inverse="true" cascade="all">
<key>
<column name="id_order" not-null="true" />
</key>
<one-to-many class="hibernate.OrderItem" />
</set>
</class>
类订购
public class Order implements java.io.Serializable {
private Integer idOrder;
private Set<OrderItem> orderItems = new HashSet<OrderItem>(0);
}
这里是OrderItem.hbm.xml
<class name="hibernate.OrderItem" table="order_item" catalog="my">
<id name="idOrderItem" type="java.lang.Integer">
<column name="id_order_item" />
<generator class="identity" />
</id>
<many-to-one name="order" class="hibernate.Order" fetch="select">
<column name="id_order" not-null="true" />
</many-to-one>
</class>
类OrderItem的
public class OrderItem implements java.io.Serializable {
private Integer idOrderItem;
private Order order;
}
当我试图挽救它,它扔我的异常。
object references an unsaved transient instance - save the transient instance before flushing: hibernate.Order
编辑: 它与下面的语句。它是否正确?
Order order = mapper.map(dtoOrder, Order.class);
Set<OrderItem> orderItems = order.getOrderItems();
for (OrderItem orderItem : orderItems) {
orderItem.setOrder(order);
}
order.setOrderItems(orderItems);
session.save(order);
你可以附带保存逻辑的代码吗?也许一个DAO类? 从异常看来,您似乎试图在Order实例持久化之前坚持OrderItem。 – spiritwalker 2013-02-16 02:15:13
我编辑了我的问题。 – misco 2013-02-16 02:24:39
是的,因为您的级联实际上在** Order.hbm.xml **中,所以保存一个Order将使相关的OrderItem实例保持持久性,但不会相反。 – spiritwalker 2013-02-16 02:26:21