我正在尝试将复合主键引用到另一个表。我看到了很多话题,但在我的案例中没有答案。
在我的数据库中,未添加owner_id的外键正确地创建了列。因此,即使雇员不存在,我也可以添加新记录。我使用SQLLite作为数据库
甲级:
@Column(name = "filename", unique = true)
private String filename;
@EmbeddedId
private TimeSheetID id;
@MapsId("owner_id")
@JoinColumn(name = "owner_id", referencedColumnName = "employee_id")
@ManyToOne
private EmployeeeEntity employee;B类
public class TimeSheetID implements Serializable{
private static final long serialVersionUID = 7469844076039968866L;
@Column(nullable = false, name = "period")
private String period;
@Column(nullable = false, name = "owner_id")
private String ownerId;
// …
}C类
@Column(nullable = false)
public String getName() {
return name;
}
@Id
@Column(name = "employee_id")
public String getEmployeeID() {
return employeeID;
}
@Column(nullable = false)
public String getBusinessUnit() {
return businessUnit;
}发布于 2017-03-01 13:38:25
你当时很亲密。
与其在@MapsId注释中使用列名,不如使用对应于该外键的类字段名:
@MapsId("ownerId")
@ManyToOne
private EmployeeeEntity employee;另外,由于@Column已经在@Embeddable中指定,所以不需要再次指定它。这里也不需要referencedColumnName,因为您指向的是目标id字段,默认情况下,目标id字段是由持久性提供者选择的。
https://stackoverflow.com/questions/42532873
复制相似问题