中加入包含非主鍵列的表我正在使用遺留系統,需要從數據庫讀取一些信息。下面是表關係一對多關聯 - 在JPA
供應商(廠商ID - PK,vendorEid,名)
VendorContactBridge(bridgeId -pk,vendorEid,contactEid)
聯繫(使用ContactID -pk,contactEid,電話)
vendorEid和contactEid不是表格的主鍵,而是用作Join表格VendorContactBridge中的連接列。
供應商實體 -
@Entity
@Table(name="Vendor")
public class Vendor implements Serializable{
@Id
@Column(name="VENDORID")
private BigDecimal vendorId;
@Column(name="VENDOREID")
private BigDecimal vendorEid;
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name="VENDORCONTACTBRIDGE",
joinColumns={@JoinColumn(name="VENDOREID", referencedColumnName="VENDOREID")},
inverseJoinColumns={@JoinColumn(name="CONTACTEID", referencedColumnName="CONTACTEID")})
private Set<Contact> vendorContact;
}
聯繫實體 -
@Entity
@Table(name="CONTACT")
public class Contact implements Serializable{
@Id
@Column(name="CONTACTID")
private BigDecimal contactId;
@Column(name="CONTATEID")
private BigDecimal contactEId;
@ManyToOne
@JoinTable(name="VENDORCONTACTBRIDGE",
joinColumns={@JoinColumn(name="CONTACTEID", referencedColumnName="CONTATEID")},
inverseJoinColumns={@JoinColumn(name="VENDOREID", referencedColumnName="VENDOREID")})
private Vendor vendor;
}
運行查詢時,得到下面的異常
SecondaryTable JoinColumn不能引用非主鍵。
我刪除了我在Vendor實體中給出的Eager fetch,我沒有得到任何異常但它不加載集合。關聯有什麼問題?
選項2:你的意思是,我應該做兩個DB調用一個基於VendorEid和再次從VendorContactBridge越來越ContactEid上聯繫上ContactEid ASED?我的理解是否正確? – Pankaj
這將是基本原則。但最好使用本機查詢,因爲您可以執行連接,並使用單個sql查詢來檢索對象。 – Eelke