首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带外键的EmbeddedId

带外键的EmbeddedId
EN

Stack Overflow用户
提问于 2017-03-01 13:18:54
回答 1查看 8.1K关注 0票数 6

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

在我的数据库中,未添加owner_id的外键正确地创建了列。因此,即使雇员不存在,我也可以添加新记录。我使用SQLLite作为数据库

甲级:

代码语言:javascript
复制
@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类

代码语言:javascript
复制
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类

代码语言:javascript
复制
@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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-01 13:38:25

你当时很亲密。

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

代码语言:javascript
复制
@MapsId("ownerId")
@ManyToOne
private EmployeeeEntity employee;

另外,由于@Column已经在@Embeddable中指定,所以不需要再次指定它。这里也不需要referencedColumnName,因为您指向的是目标id字段,默认情况下,目标id字段是由持久性提供者选择的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42532873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档