[英]Multiple @ManyToOne fields pointing to same entity in JPA / Hibernate
我有一個Order
實體,它有billingAddress
和shippingAddress
。 我也有一個Address
實體。 我正在努力使一個地址表同時包含送貨地址和帳單地址,因為沒有什么可以區分它們,並且一個或多個訂單中的帳單和送貨地址可以相同。 我在Order
的地址字段中使用了@ManyToOne
,但我不確定這種雙向的正確方法。
我有兩個問題:
@ManyToOne
是否適用於地址字段,因為它實際上是一個n:2關系,我只是使用兩個單獨的字段來表示? 如果沒有,我該怎么辦呢? Address
實體中使用什么注釋?)? 可以通過在Address
中的注釋中列出多個列來完成嗎? 碼:
@Entity
@Table(name = "orders")
public class Order {
//...
private Address shippingAddress;
private Address billingAddress;
@ManyToOne
@JoinColumn(name = "shipping_address_id", referencedColumnName = "address_id", nullable = false)
public Address getShippingAddress() {
return shippingAddress;
}
@ManyToOne
@JoinColumn(name = "billing_address_id", referencedColumnName = "address_id", nullable = false)
public Address getBillingAddress() {
return billingAddress;
}
//...
}
@Entity
@Table(name = "addresses")
public class Address {
//address1, address2, city, state, etc.
//how to link back to Orders?
private Set<Order> orders;
}
關於你的第一個問題:它是ManyToOne嗎?
這取決於。 如果多個訂單可以具有相同的送貨地址,那么它就是ManyToOne。 如果只有一個訂單可以有一個給定的送貨地址,那么它就是OneToOne。 帳單地址相同。
我不確定雙向關聯是個好主意。 在這種情況下我可能不會這樣做。 但是如果你想讓它成雙向,那么你必須使它們雙向。 你確實在這里有兩個不同的聯想。 因此映射如下所示:
@OneToMany(mappedBy = "shippingAddress")
private Set<Order> shippedOrders;
@OneToMany(mappedBy = "billingAddress")
private Set<Order> billedOrders;
或者,如果該關聯實際上是OneToOne(請參閱第一個問題的答案):
@OneToOne(mappedBy = "shippingAddress")
private Order shippedOrder;
@OneToOne(mappedBy = "billingAddress")
private Order billedOrder;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.