Я работаю над устаревшей системой, вам нужно прочитать некоторую информацию из базы данных. Ниже приведены взаимосвязи табличныхОт одной до многих ассоциаций - объединение таблиц с непервичным ключевым столбцом в JPA
Vendor (VendorID - рк, vendorEid, имя)
VendorContactBridge (BridgeID -pk, vendorEid, contactEid)
Контакта (ContactId -pk, contactEid, телефон)
vendorEid и contactEid не являются первичным ключом таблицы, а используются в качестве столбца объединения в таблице Join VendorContactBridge.
Поставщик Entity -
@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 -
@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 не может ссылаться на несырьевых ключ.
Я удалил Eager fetch, который я дал в объекте Vendor, я не получаю исключения, но он не загружает коллекцию. Что случилось с ассоциацией?
Вариант 2: Вы имеете в виду, я должен сделать два дб позвонить по одному для получения ContactEid из VendorContactBridge на основе VendorEid а снова связаться с Ased на ContactEid? Правильно ли я понимаю? – Pankaj
Это будет основной принцип. Но было бы лучше использовать собственный запрос, так как вы могли бы сделать соединение и, таким образом, использовать один запрос sql для извлечения объектов. – Eelke