You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA中Location表继承ProprietiesModel表ID列问题求助

问题分析与实现方案

你当前的代码存在两处核心问题:一是同时在父子类中声明了@Id主键注解,不符合JPA实体继承的规范;二是父类中定义了Location类型的属性会造成循环依赖,无法正常生成表结构。下面提供两种适合新手的落地实现方案:

方案1:单向关联(轻量首选,符合父子表独立存储需求)

取消不必要的类继承,直接通过外键关联两个表,逻辑清晰易理解:

修改后的ProprietiesModel代码

@Entity
@Table(name="proprieties")
public class ProprietiesModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String test;
    // 无特殊双向查询需求可以删掉这里的Location属性,避免循环依赖
    public int getId() {
        return id;
    }
    // 补充其余属性的getter、setter方法
}

修改后的Location代码

@Entity
@Table(name = "location")
public class Location {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String street;
    private int streetNumber;
    // 关联父表,会自动在location表生成proprieties_id外键字段
    @OneToOne
    @JoinColumn(name = "proprieties_id", referencedColumnName = "id")
    private ProprietiesModel proprieties;
    // 封装方法直接获取父表ID
    public int getProprietiesId() {
        return proprieties != null ? proprieties.getId() : null;
    }
    // 补充其余属性的getter、setter方法
}

后续业务代码中直接调用location实例.getProprietiesId()即可拿到对应父表的ID。

方案2:JPA继承映射(适合需要保留类继承关系的场景)

如果确实需要Location继承ProprietiesModel的属性和方法,可以使用JPA官方的继承策略实现,不需要额外加关联字段:

修改后的ProprietiesModel代码

@Entity
@Inheritance(strategy = InheritanceType.JOINED) // 指定父子表独立存储的继承策略
@Table(name="proprieties")
public class ProprietiesModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String test;
    public int getId() {
        return id;
    }
    // 补充其余属性的getter、setter方法
}

修改后的Location代码

@Entity
@Table(name = "location")
public class Location extends ProprietiesModel{
    // 删掉子类自己定义的id属性,直接继承父类的id
    private String street;
    private int streetNumber;
    // 补充属性的getter、setter方法
}

这个方案下Location实例直接调用从父类继承的getId()方法,拿到的就是proprieties表对应的主键ID。

新手注意事项

  • 所有实体类的属性必须补充完整的getter、setter方法,否则JPA无法正常读写数据
  • 存储数据时要先保存父表实体,再保存关联的子表实体,避免外键约束报错
    内容的提问来源于stack exchange,提问作者Claudiu-Andrei Cojocar
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:48:03