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

时间:2014-01-30 09:17:30

标签: java jpa jpa-2.0

假设您有一个表格如下:

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列?欢迎提出建议。

1 个答案:

答案 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约束强制用户名的唯一性。