Hibernateリファレンスドキュメントのケースと完全に類似した例があります。この例の直前に、説明があります。問題に一致する例を次に示します(ユーザーはテーブルA、顧客はテーブルB)。
@Entity
class Customer {
@EmbeddedId CustomerId id;
boolean preferredCustomer;
@MapsId("userId")
@JoinColumns({
@JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
@JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
})
@OneToOne User user;
}
@Embeddable
class CustomerId implements Serializable {
UserId userId;
String customerNumber;
//implements equals and hashCode
}
@Entity
class User {
@EmbeddedId UserId id;
Integer age;
}
@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
//implements equals and hashCode
}
注:これら2つのテーブルの代理識別子を持っている方がはるかに簡単です。レガシースキーマを処理する必要がない限り、自分に有利に働き、代理キーを使用してください。