假设您有一个表格如下:
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
列?欢迎提出建议。
答案 0 :(得分:2)
简单的解决方案是:
@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;
}
根据自己的经验注意:
我建议创建surrogate primary key数字类型(从DB角度来看是有益的)。您可以通过DB约束强制用户名的唯一性。