0
JPA로 기존 데이터베이스 테이블을 사용하여 작업해야합니다. 테이블은 복합 기본 키를 사용합니다. 외부 키 속성은 테이블의 기본 키와 겹칩니다.JPA 복합 PK/PK/FK 오버랩을 가진 @OneToMany
단순화 된 예는, 각각의 '주문'이 많은 'OrderItems에'나는 다음과 같은 엔티티 및 ID-클래스 생성
Table Order Table OrderItem
------------------- ----------------------
businessDomain (PK) businessDomain (PK/FK)
orderId (PK) oItemId (PK)
field1 orderId (FK)
field2 ... description ...
:
// ============== Order Entity ======================
@Entity
@IdClass(OrderId.class)
public class Order implements Serializable {
@Id
private long busindessDomain;
@Id
private long orderId;
private String field1;
private String field2;
//Getters/Setters
}
// ============== OrderItem Entity ==================
@Entity
@IdClass(OrderItemId.class)
public class OrderItem implements Serializable {
@Id
private long busindessDomain;
@Id
private long oItemId;
private String description;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="orderId", referencedColumnName="orderId", insertable=false, updatable=false)
private Order order;
//Getters/Setters
}
// ============== OrderId class =====================
public class OrderId implements Serializable {
private long busindessDomain;
private long orderId;
//Getters/Setters
}
// ============== OrderItemId class =================
public class OrderId implements Serializable {
private long busindessDomain;
private long oItemId;
//Getters/Setters
}
을하지만 그건 '작업 아무튼. 그렇다면 orderItem에서 겹침 및 복합 키와 관련하여 순서를 올바르게 매핑하려면 어떻게해야합니까?
도움 주셔서 감사합니다. 다니엘
편집 :
좋아, 여기에 작동하는 것 같다 다른 시도이다. 추가 테스트가 필요합니다.
// ============== Order Entity ======================
@Entity
@IdClass(OrderId.class)
public class Order implements Serializable {
@Id
private long busindessDomain;
@Id
private long orderId;
private String field1;
private String field2;
@OneToMany(targetEntity=OrderItem.class, mappedBy="order")
private List<OrderItem> orderItems;
//Getters/Setters
}
// ============== OrderItem Entity ==================
@Entity
@IdClass(OrderItemId.class)
public class OrderItem implements Serializable {
@Id
private long busindessDomain;
@Id
private long oItemId;
private String description;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="businessDomain", referencedColumnName="businessDomain"),
@JoinColumn(name="orderId", referencedColumnName="orderId")
})
private Order order;
//Getters/Setters
}
나는 모두 businessDomain 및 ORDERID는 주문에 참조 할 필요가 있다고 생각합니다. businessDomain 만 있으면 각 orderItem에 대해 수백만 개의 주문을 받게됩니다. – reindan
죄송합니다. orderId는 또한 내가 그 관계를 잘못 이해할 것을 요구합니다. orderId를 referencecolumn으로 추가하면됩니다. – Rohit