[英]Mapping keys in JPA: Primary key is a foreign key
假设您有一个如下表:
CREATE TABLE IF NOT EXISTS CREDENTIAL (
USER_NAME VARCHAR(20) NOT NULL,
HASHED_PASSWORD VARCHAR(128) NOT NULL,
CREATION_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_UPDATE_DATE TIMESTAMP,
LAST_UPDATED_BY VARCHAR(20),
PRIMARY KEY (USER_NAME),
FOREIGN KEY (USER_NAME) REFERENCES USER(USER_NAME),
FOREIGN KEY (LAST_UPDATED_BY) REFERENCES USER(USER_NAME)
) CHARACTER SET utf8;
可以看到USER_NAME
列既是表的主键又是外键。 是的,MySQL成功生成了该表。
问题很简单,我将如何在JPA实体中映射它? 我是否应该有1个ID映射到USER_NAME
列,而另一个字段User user
加入USER_NAME
列? 欢迎提出建议。
简单的解决方案是:
@Entity
public class Credential {
@Id
private String userName;
@ManyToOne
@JoinColumn(name = "user_name")
private User owner;
@ManyToOne
@JoinColumn(name = "last_modified_by")
private User lastUpdatedBy;
}
亲身经历:
我建议创建数字类型的代理主键 (从数据库角度来看是有益的)。 您可以通过数据库约束来强制用户名的唯一性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.