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

Hibernate映射子类被加载为父类的问题排查与解决

Hibernate继承映射加载异常排查与解决

我定义了Project类,以及父类Resource和它的两个子类StorageResource、ComputeResource,使用Hibernate 5.3.7.Final版本配置如下映射:

@Entity
@Table(name = "PROJECTS", ...})
public class Project implements Serializable {
    ...
    @OneToMany(
        mappedBy = "project",
        cascade = CascadeType.ALL,
        orphanRemoval = true
    )
    private List<Resource> resources;
    ...
}

@Entity
@Table(name = "resources")
@Inheritance(strategy = InheritanceType.JOINED)
public class Resource implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @ManyToOne
    private Project project;
    ...
}

@Entity
@Table(name = "storage_resources")
@PrimaryKeyJoinColumn(name = "id")
public class StorageResource extends Resource implements Serializable {
    ...
}

@Entity
@Table(name = "compute_resources")
@PrimaryKeyJoinColumn(name = "id")
public class ComputeResource extends Resource implements Serializable {
    ...
}

保存两个子类实例到数据库时一切正常,但加载项目及其关联资源时出现异常:

  • 存储资源记录能正确加载为StorageResource实例
  • 计算资源记录被加载为Resource实例,而非预期的ComputeResource实例

对比两个子类的映射配置,确认代码层面配置完全一致,耗时两天排查后发现,问题出在运行环境的Hibernate配置文件中——缺失了ComputeResource的映射配置项:

<mapping class="....ComputeResource"/>

添加该配置项后,映射加载恢复正常。

内容的提问来源于stack exchange,提问作者Giorgio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:50:21