我有父實體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