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

HSQL数据库基于Jakarta实现JPA继承映射时子类属性未生成问题

问题产生原因

  1. 核心原因是子类中定义的属性均为双向@OneToMany关联的被维护端属性,JPA规范中一对多关联的外键默认存储在多的一方对应的数据库表中,不会在一的一方(也就是当前子类)对应的表中生成字段:
    • ProfesorDAO中的actividadesPropuestas关联的外键已经生成在ACTIVIDADES表的ID_PROFESOR字段,和你提供的建表脚本完全匹配
    • SocioDAO中的registrosAClase关联的外键已经生成在REGISTROS表的ID_SOCIO字段
  2. 目前两个子类中没有定义非关联类型的普通自有字段(比如字符串、数值类型的基础业务字段),所以子类表仅保留了关联父表的主键字段,属于符合JPA规范的正常表现。
  3. 若你确实在子类中添加了普通字段仍未生成,可排查是否存在JPA配置错误、实体扫描未覆盖子类、Getter/Setter方法不符合规范的问题。

解决建议

  • 若只是疑惑关联字段为何没有出现在子类表:当前表现完全符合设计逻辑,无需修改。关联关系的维护只需要在插入多侧数据(比如ActividadDeportivaDAO、RegistroDAO)时,给对应的关联属性赋值子类对象即可自动建立关联,查询子类对象时可以正常获取关联集合。
  • 若需要在子类表新增自有业务字段:直接在子类中添加普通类型字段并加上@Column等映射注解,重新生成表结构即可在子类表中看到对应字段。
  • 若查询子类无法获取关联集合:可将@OneToMany的fetch属性修改为FetchType.EAGER,或者查询时使用join fetch语法主动加载关联集合,同时确保查询时返回的是子类类型而非父类UsuarioDAO类型。
  • 排查配置问题:确认JPA的DDL生成策略配置为create/create-drop,避免旧表结构缓存影响生成结果,同时确认所有实体的Getter/Setter方法为public修饰。

内容的提问来源于stack exchange,提问作者Diego Fernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:00