EmbeddedId用外键

时间:2017-03-01 13:18:55

标签: java jpa orm

我正在尝试使用复合主键来引用另一个表。我看到很多主题,但在我的案例中没有答案。

在我的数据库中,未添加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;
}

1 个答案:

答案 0 :(得分:5)

你很亲密。

您应该使用与该外键对应的类字段名称,而不是在@MapsId注释中使用列名:

@MapsId("ownerId")
@ManyToOne
private EmployeeeEntity employee;

同样由于@Column中已指定@Embeddable,您无需再次指定它。当你指向目标id字段时,也不需要referencedColumnName,默认情况下由持久性提供程序选择。