3

かなり興味深い結合シナリオを持つレガシーデータベースをマッピングしようとしています。具体的には、結合テーブルを介して非主キーに結合しようとしています。現在、参照が単一のプロパティにマップされていないことを示すエラーが発生しています

データベース

最初は、この質問のために大幅に簡略化されたデータベースです。関心のある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になりますが、それ以外は少し途方に暮れています。うまくいけば、私は他の人に明らかな何かを見逃しています。どんな助けでも大歓迎です。

4

0 に答える 0