繁体   English   中英

JPA中的映射键:主键是外键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM