java - 在 JPA/Hibernate 中使用 PK 作为 FK

标签 java mysql sql hibernate jpa

我如何在 hibernate 中建模主键也是外键的表

作为这个架构:

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. 这在 hibernate 映射中是否可能,或者最好是分开 他们并使用新的 PK?
  2. 如果我在主表上使用自动递增也没关系

最佳答案

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

@Id
@Column(name="policy_id")
private policyId;

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

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

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

关于java - 在 JPA/Hibernate 中使用 PK 作为 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363843/

相关文章:

java - 为什么我得到 "The method getContext() is undefined for the type MainActivity"?

java - 如何指定 Maven 编译器插件顺序

php - 使用 PDO 和 MySQL 更新查询

MySQL SQL 查询 0 或 1

java - 想要为我的 java mysql 项目制作安装文件

java - 在 JFileChooser 中调整 JList 文件元素的大小

java - 使用 Swing 绘制选择框

sql - sql中日期时间差的总和(HH.MM)

sql - Postgres 将字符串转换为时间

sql - Mysql:优化在嵌套集合树中查找 super 节点