【问题标题】:Use the PK as FK in JPA/Hibernate在 JPA/Hibernate 中使用 PK 作为 FK
【发布时间】:2015-02-06 10:38:16
【问题描述】:

我如何在hibernateo表中建模,主键也是外键

作为这个架构:

CREATE TABLE policies (
   policy_id          int,
   date_issued        datetime,

   -- // other common attributes ...
);

CREATE TABLE policy_motor (
    policy_id         int,
    vehicle_reg_no    varchar(20),

   -- // other attributes specific to motor insurance ...

   FOREIGN KEY (policy_id) REFERENCES policies (policy_id)
);

CREATE TABLE policy_property (
    policy_id         int,
    property_address  varchar(20),

   -- // other attributes specific to property insurance ...

   FOREIGN KEY (policy_id) REFERENCES policies (policy_id)
);
  1. 这在休眠映射中是否可能,或者最好是分开 他们并使用新的PK?
  2. 如果我在主表上使用自动增量也没关系

【问题讨论】:

    标签: java mysql sql hibernate jpa


    【解决方案1】:

    当然可以。这对于您可以拥有的一对一关联很有用:

    @Id
    @Column(name="policy_id")
    private policyId;
    
    @MapsId
    @OneToOne
    @JoinColumn(name = "policy_id")
    private Policy policy;
    

    您可以在主表上使用 AUTO-INCREMENT,这意味着您需要在 JPA/Hibernate 中使用 IDENTITY 生成器。

    @MapsId 允许您与实体标识符属性共享同一 SQL 列。它指示 Hibernate 使用此列来解析 @OneToOne@ManyToOne 关联。更改应始终通过 @Id 属性传播,而不是单向传播(在插入/更新期间会被忽略)。

    【讨论】:

    • @MapsId 是什么意思?
    • 感谢它真的帮助了我,因为我使用了休眠工具,它为我生成了一个带有 @Embeddable 东西的额外表格。
    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 2011-05-16
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多