当前位置: 首页 > 知识库问答 >
问题:

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

令狐俊风
2023-03-14

假设您有一个表,如下所示:

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实体中映射这一点?我是否应该有映射到user_name列的1个id和连接user_name列的另一个字段user?欢迎提出建议。

共有1个答案

穆浩皛
2023-03-14

null

@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;


}

亲身经历说明:

我建议创建一个数值类型的代理主键(从DB的角度来看是有益的)。您可以通过DB约束来强制用户名的唯一性。

 类似资料:
  • 我在将外键映射为主键时遇到问题。 我的桌子是: 下面是我定义为实体的类: 客户爪哇: 游戏。爪哇: 票爪哇: 票d.java: 到目前为止,我已经尝试了所有的建议,但没有一个有用。另外,我需要这个PK由外键组成,所以我真的需要帮助解决,我应该如何正确地映射它。

  • 我有两个表:A和B,都有一个复合主键。表B的PK也是表a主键的外键。 当我试图获取映射表B的类的实例时,我得到了以下异常: org.hibernate.TypeMismatchException 这两个类都位于package:com.cairone.ejemple01.entities 完整的日志输出为: 2016-09-21 12:28:24.505错误8568--[main] O.S.Boot

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 我的数据库是: 我们可以在Table2中为Table1中的1设置多行。 我的TABLE1实体是: 我的Table1Id类是: 我的TABLE2实体是: 我的Table2Id类是: 当我尝试启动我的tomcat时,我有以下错误: 我尝试使用引用列,主键连接列和许多其他东西,但是通过在互联网上阅读它,它可以解决数据库建模问题。我认为问题是主键和外键在2个表中具有相同的名称,但我可能是错的......我

  • 我有2个表,即user和user_session。

  • 问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身