私はレガシーシステムで作業しています。データベースから情報の一部を読み取る必要があります。以下は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は、非主キーを参照することはできません。
ベンダーエンティティで指定したEagerフェッチを削除しましたが、例外はありませんが、コレクションはロードされません。関連の問題は何ですか?
オプション2:あなたが意味するか、私は連絡先にVendorEidに基づいてVendorContactBridgeからContactEidを取得して、再度のための2デシベルの呼び出しものを作る必要がありContactEidにASED?私の理解は正しいのですか? – Pankaj
これは基本的なプリンシパルになります。しかし、結合を行うことができるようにネイティブクエリを使用し、オブジェクトを取得するために単一のSQLクエリを使用するのが最善の方法です。 – Eelke