나는 Hibernate에서 주문과 주문 항목을 매핑하려고한다. 주문 항목은 부모 순서를 참조 할 수 없습니다해야합니다Hibernate 부모 - 자식 매핑
public class Order {
private long id;
private Set<OrderIter> orderItems = new HashSet<OrderItem>();
public long id() {
return id;
}
public void add(OrderItem item) {
item.setItemNumber(orderItems.size() + 1);
orderItems.add(item);
}
public Set<OrderItem> orderItems() {
return Sets.newHashSet(orderItems);
}
}
public class OrderItem {
private int itemNumber;
public int itemNumber() {
return itemNumber;
}
public void setItemNumber(int itemNumber) {
this.itemNumber = itemNumber;
}
}
목적은 다음과 같이 Hibernate는 자동으로이 순서에 추가되는 경우 주문 항목을 유지하는 것입니다 :
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Order order = (Order) session.load(Order.class, orderId);
OrderItem item = new OrderItem();
order.add(item);
// Done
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
나는 모습을 Chapter 24. Example: Parent/Child에 있지만이 예에서는 하위가 상위에 대한 참조를가집니다.
<class name="Order" table="ORDERS">
<id name="id" column="ORDER_ID" access="field">
<generator class="native" />
</id>
<set name="orders" table="ORDER_ITEMS" access="field">
<key column="id" />
<composite-element class="OrderItem">
<property name="ItemNumber" access="field" />
</composite-element>
</set>
</class>
이 거의 노력하고 있습니다 만, 주문 ID 및 항목 번호의 조합은 고유해야 : 지금 Collections of dependent objects을 사용하여지도하기 위해 노력하고있어. Hibernate 매핑으로 이러한 모든 기준을 어떻게 충족시킬 수 있습니까?
Order와 OrderItem 간의 일대 다 연관에 대해 조인 테이블을 사용해보십시오. – frictionlesspulley
@EdSaito : 'item.setItemNumber (orderItems.size() + 1);') 코드를 사용하여 고유성을 얻을 수 없습니다. 여기서는 DB 시퀀스 (또는 자동 증가 된 키)를 시뮬레이트하려고하지만 동일한 항목 수의 주문에 새 항목을 추가 할 때 확실히 실패합니다. DB만이 일관된 방식으로 처리 할 수 있습니다 (두 응용 프로그램이 순서대로 항목 목록을 업데이트하는 상황을 상상해보십시오). 이를 수행하는 유일한 방법은 자동 생성 된 키를 이용하는 것이므로 'OrderItem'은 독립적 인 엔터티 여야합니다 (@frictionlesspulley 응답 참조). –
맞습니다. 그러나 이것은 매핑 문제를 설명하기위한 단순한 시나리오입니다. –