我正在处理一个遗留系统,需要从数据库中读取一些信息。以下是表之间的关系:
供应商(vendorId - pk,vendorEid,名称)
供应商联系人桥接表(bridgeId -pk,vendorEid,contactEid)
联系人(contactId -pk,contactEid,电话)
vendorEid和contactEid不是表的主键,但在连接表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,虽然没有异常但是它没有加载集合。这个关联有什么问题吗?