かなり興味深い結合シナリオを持つレガシーデータベースをマッピングしようとしています。具体的には、結合テーブルを介して非主キーに結合しようとしています。現在、参照が単一のプロパティにマップされていないことを示すエラーが発生しています
データベース
最初は、この質問のために大幅に簡略化されたデータベースです。関心のある3つのテーブルがあります。
Userテーブルにはメインデータが含まれ、列'ReferenceId'が含まれます。Locationテーブルは、「ReferenceId」もあるという点で似ており、1日の終わりにユーザーに埋め込みたいデータを表します。このテーブルは、a)複合キーがあり、b)結合しようとしている列がこのキーの一部であるため、注目に値します。最後に、UserLocationは、それらを結び付けるテーブルであり、referenceIdsからReferenceIdsへのマッピングがあります。
クラス
次に、それらを一緒にマップします。私は私のクラスを持っています:
ユーザー:
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 3709178675764332063L;
@Id
private Long id;
@Column(name = "uname")
private Long name;
@OneToOne(targetEntity = Location.class, fetch = FetchType.LAZY)
@JoinTable(name = "CandidateLocation", joinColumns = { @JoinColumn(name = "UserReference") }, inverseJoinColumns = { @JoinColumn(name = "LocationReference", referencedColumnName="ReferenceId") })
private Location location;
}
と場所:
@Entity
@Table(name = "Locations")
@IdClass(LocationPK.class)
public class Location implements Serializable {
private static final long serialVersionUID = -582319915736694876L;
@Id
@Column(name = "referenceId")
private Long referenceId;
@Id
@Column(name = "IDParam1")
private Long IDParam1;
@Column(name = "loc_name")
private String name;
// ETC...
}
問題
私が得ている問題は、関連付けが機能しないことです。代わりに、次のような例外が発生します。
org.hibernate.AnnotationException:com.foo.Locationを参照するcom.foo.User.locationのreferencedColumnNames(ReferenceId)が単一のプロパティにマップされていません。
を省略することはできません。そうしないreferenceColumnName
と、デフォルトでPKになりますが、それ以外は少し途方に暮れています。うまくいけば、私は他の人に明らかな何かを見逃しています。どんな助けでも大歓迎です。