为了账号安全,请及时绑定邮箱和手机立即绑定

将外键作为模型中的主键

将外键作为模型中的主键

白板的微信 2021-11-17 17:23:25
我需要将外键列作为我的休眠应用程序模型中的主键。当我设置@Id 时出现错误。这是我的模型@Entity@Table(name = "otp")public class OTP {@Idprivate Origin origin;private int code;@Column(name = "created_at", nullable = true)private Date created_at=new Date();}以上实体模型不能添加id。那么如何为外键列添加 id。正如你所看到的,我有原始类一对一的关系。我需要这种关系是主键
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

外键允许重复,这使得它们在大多数情况下不适合作为主键。然而,这不是规则。


唯一的例外是具有一对一关系的表,其中链接表的外键和主键相同。


我遇到了类似的情况并做了这样的事情,


@Entity

@Table(name = "PERSON_DETAILS")

public class PersonDetails {

    @Id

    private Long personId; 


    @OneToOne(fetch = FetchType.LAZY)

    @JoinColumn(name = "ID_PERSON", nullable = false)

    @MapsId

    private Person person;

    ....

}


@Entity

@Table(name = "PERSON")

@SequenceGenerator(name = "SQ_PRSN_ID", sequenceName = "SQ_PRSN_ID")

public class Person{

    @Id

    @GeneratedValue(generator = "SQ_PRSN_ID", strategy = GenerationType.SEQUENCE)

    @Column(name = "ID_PERSON", nullable = false)

    private Long personId;

    ...

}

我在这里找到了类似的例子,希望这是你正在寻找的。


查看完整回答
反对 回复 2021-11-17
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

首先,您不能将关系作为主键。相反,您可以将外键作为主键,当且仅当两个表之间的关系是一对一的。


在您的情况下,因为它是一对一的,所以我们很高兴。


但不是用@Id 注释Origin。使用@Id 注释外键并在定义关系时使用@MapsId。


请参阅下面的示例代码,其中人员和人员详细信息具有一对一的关系。


人员详细信息实体如下所示:


@Entity

@Table(name = "person_details")

public class PersonDetails {


    @Id

    @Column(name = "person_details_Id")

    private Long personId;


     @Column(name = "person_name")

    private String personName;


    @OneToOne

    @JoinColumn(name = "person_Id")

    @MapsId

    private Person person;


    ...

}

人实体看起来像:


@Entity

@Table(name = "person")

public class Person {


    @Id

    @GeneratedValue(strategy = GenerationType.SEQUENCE)

    @SequenceGenerator(name = "person_seq")

    @Column(name = "person_id")

    private Long personId;


    @Column(name = "person_profsn")

    private String personProfession;


    @OneToOne(mappedBy = "person")

    private PersonDetails personDetails;


    ...

}


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信