3

我正在尝试映射具有一些相当有趣的连接场景的遗留数据库。我特别试图通过连接表连接到非主键。现在,我收到一个错误,指出引用未映射到单个属性

数据库

首先是数据库,对于这个问题已经大大简化了。有三个感兴趣的表: 数据库关系图

User表包含主要数据并包含一列“ReferenceId”。Location表的相似之处在于它也有一个“ReferenceId”,并表示我想在一天结束时嵌入到用户中的数据。该表值得注意,因为它 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.User.location 的 referencedColumnNames(ReferenceId) 引用 com.foo.Location 未映射到单个属性。

我不能省略,referenceColumnName否则它将默认为PK,但除此之外,我有点茫然。希望我错过了对其他人来说显而易见的东西。任何帮助将不胜感激。

4

0 回答 0