我正在尝试使用复合主键来引用另一个表。我看到很多主题,但在我的案例中没有答案。
在我的数据库中,未添加owner_id
的外键正确创建列。因此,即使员工不存在,我也可以添加新记录。
我使用SQLLite
作为数据库
A类:
@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;
}
答案 0 :(得分:5)
你很亲密。
您应该使用与该外键对应的类字段名称,而不是在@MapsId
注释中使用列名:
@MapsId("ownerId")
@ManyToOne
private EmployeeeEntity employee;
同样由于@Column
中已指定@Embeddable
,您无需再次指定它。当你指向目标id字段时,也不需要referencedColumnName
,默认情况下由持久性提供程序选择。