带外键的EmbeddedId

VAN*_*LKA 4 java orm jpa

我正在尝试参考另一个表使用复合主键。我看到了很多主题,但没有答案适合我。

在我的数据库中,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;
Run Code Online (Sandbox Code Playgroud)

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;

    // …

}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

Mac*_*ski 6

你很亲近

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

@MapsId("ownerId")
@ManyToOne
private EmployeeeEntity employee;
Run Code Online (Sandbox Code Playgroud)

同样,由于@Column已经在@Embeddable中指定了,因此无需再次指定。有referencedColumnName作为你都指向目标id字段,这是在默认情况下持续提供choosen也是没有必要的。