我正在尝试映射具有一些相当有趣的连接场景的遗留数据库。我特别试图通过连接表连接到非主键。现在,我收到一个错误,指出引用未映射到单个属性
数据库
首先是数据库,对于这个问题已经大大简化了。有三个感兴趣的表:
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,但除此之外,我有点茫然。希望我错过了对其他人来说显而易见的东西。任何帮助将不胜感激。