저는 기존 시스템에서 작업 중이며 데이터베이스에서 정보 일부를 읽을 필요가 있습니다.
VendorContactBridge (bridgeId -pk, vendorEid, contactEid)
연락 (contactId의의 -pk, contactEid, 전화)일대 다 연관 - JPA에서 비 기본 키 열이있는 테이블을 결합하십시오.
vendorEid 및 contactEid - 아래 테이블 관계를
공급 업체 (PK, vendorEid, 이름 VendorID 값)입니다 테이블의 기본 키가 아니며 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가 아닌 기본 키를 참조 할 수 없습니다 예외 이하지고, 쿼리를 실행하는 동안.
나는 공급 업체 엔티티에서 지정한 Eager 가져 오기를 제거했는데 예외는 없지만 컬렉션을로드하지는 않습니다. 연관성에있어 잘못된 점은 무엇입니까?
옵션 2 : 당신은 의미합니까, 내가 연락이 ContactEid에 ased에 VendorEid과 다시에 따라 VendorContactBridge에서 ContactEid를 얻기 위해 하나를 호출 DB를 두를 수 있도록해야합니까? 내 이해가 맞습니까? – Pankaj
기본 교장이됩니다. 그러나 조인을 할 수있는 것처럼 기본 쿼리를 사용하는 것이 가장 좋을 것이므로 단일 SQL 쿼리를 사용하여 개체를 검색 할 수 있습니다. – Eelke