0
我需要使用JPA與現有數據庫表一起工作。這些表使用複合主鍵。外鍵屬性與表的主鍵重疊。JPA @OneToMany與複合PK - PK/FK重疊
簡單的例子,每一個 '秩序' 有很多 '的OrderItems'
Table Order Table OrderItem
------------------- ----------------------
businessDomain (PK) businessDomain (PK/FK)
orderId (PK) oItemId (PK)
field1 orderId (FK)
field2 ... description ...
我創建下列實體和ID類:
// ============== 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和訂單ID引用到訂單。只有businessDomain,我會爲每個orderItem獲得數百萬的訂單。 – reindan
對不起。 orderId也是我需要誤解的關係。只需將orderId作爲參考列添加即可。 – Rohit