親エンティティOrder
と子エンティティがありOrderItem
ます。Order
と一緒にオブジェクトを保存したいのですSet<OrderItem>
が、idOrder
オートインクリメントです。Order
との間OrderItem
は1 対多の関係です。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);