これと非常によく似た問題があります:セカンダリ テーブルの主キー以外の列でテーブルを結合するにはどうすればよいですか? しかし、同じ解決策を適用できるかどうかはわかりません。
次のような 2 つのテーブルがあります。
CREATE TABLE CUSTOMER
(
CUSTOMER_ID INTEGER NOT NULL,
DETAIL_ID INTEGER NOT NULL,
PRIMARY KEY( CUSTOMER_ID ),
CONSTRAINT cust_fk FOREIGN KEY( DETAIL_ID ) REFERENCES DETAILS( DETAIL_ID )
)
CREATE TABLE DETAILS
(
DETAIL_ID INTEGER NOT NULL,
OTHER INTEGER NOT NULL,
PRIMARY KEY( DETAIL_ID )
)
これらのテーブルを という単一のクラスにマップしたいCustomer
ので、次のようにします。
@Entity
@Table(name = "CUSTOMERS")
@SecondaryTable(name = "DETAILS", pkJoinColumns=@PrimaryKeyJoinColumn(name="DETAIL_ID"))
public class Customer {
@Id
@GeneratedValue
@Column(name = "CUSTOMER_ID")
private Integer id;
@Column(table = "DETAILS", name = "OTHER")
private Integer notes;
// ...
}
ただし、これはプライマリ テーブルでDETAIL_ID
一致する場合にのみ機能します。CUSTOMER_ID
私の質問は次のとおりです。主テーブルの外部キー フィールドを使用して、副テーブルの主キーに結合するにはどうすればよいですか?
UPDATE 私は設定しようとしました:
@SecondaryTable(name = "DETAILS", pkJoinColumns=@PrimaryKeyJoinColumn(name="DETAIL_ID", referencedColumnName="DETAIL_ID"))
しかし、アプリケーションを実行すると、次の例外が発生します。
org.hibernate.MappingException: Unable to find column with logical name: DETAIL_ID in org.hibernate.mapping.Table(CUSTOMERS) and its related supertables and secondary tables