我正在尝试映射具有一些相当有趣的连接方案的遗留数据库。我特意尝试将连接表连接到非主键。现在,我收到一条错误,指出引用未映射到单个属性
首先是数据库,这个问题已经大大简化了。有三个感兴趣的表格:
用户表包含主要数据,并包含一列“ReferenceId”。 位置表的类似之处在于它也有一个'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:referencedColumnNames(ReferenceId) 引用com.foo.Location的com.foo.User.location未映射到a 单一财产。
我不能省略referenceColumnName
或者它会默认为PK,但除此之外,我有点不知所措。希望我错过了其他人明显的东西。任何帮助将不胜感激。