One to many association - Unir tabelas com coluna de chave não primária em JPA
Eu estou trabalhando no sistema legado, precisa ler algumas das informações do banco de dados. Abaixo está a relação da mesa
Fornecedor (vendorId - pk, vendorEid, nome)
VendorContactBridge (bridgeId -pk, vendorEid, contactEid)
Contato (contactId -pk, contactEid, phone)
O vendorEid e o contactEid não são a chave primária da tabela, mas são usados como coluna de associação na tabela de associação do VendorContactBridge.
Entidade do Fornecedor -
@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;
}
Entidade de Contato -
@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;
}
enquanto executa a consulta, ficando abaixo da exceção
SecondaryTable JoinColumn não pode referenciar uma chave não primária.
Eu removi a busca Eager que eu dei na entidade do fornecedor, eu não recebo qualquer exceção, mas não carrega a coleção. O que há de errado com associação?