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

使用Hibernate查询MySQL数据时遇Null值或实体未映射问题求助

问题解决方案

1. 修复findAll方法的"Customer is not mapped"错误

你的HQL查询语句使用了错误的实体类名称:

TypedQuery<Customers> query1= em.createQuery("Select c from Customer c", Customers.class);

HQL基于实体类名称而非数据库表名查询,你的实体类名为Customers,不是Customer,需修改查询语句:

TypedQuery<Customers> query1= em.createQuery("Select c from Customers c", Customers.class);

2. 修复findbyId返回Null的问题

从日志可见Hibernate已生成正确SQL,但返回null,核心问题是实体类字段类型与数据库字段不兼容:

问题1:可空字段使用基本类型

数据库中salesRepEmployeeNumber字段为int(11) DEFAULT NULL,允许存储null值,但你实体类中定义为基本类型int,基本类型无法存储null,导致Hibernate无法完成实体实例化,最终返回null。

修改实体类对应字段为包装类型:

@Column(name = "salesRepEmployeeNumber")
private Integer salesRepEmployeeNumber; // 替换int为Integer

问题2:Decimal类型映射的精度问题

数据库中creditLimit是decimal(10,2)类型,使用double会存在精度丢失风险,建议改为BigDecimal类型,完全匹配数据库数值类型:

@Column(name = "creditLimit")
private BigDecimal creditLimit; // 替换double为BigDecimal

额外检查

  • 确保实体类中所有其他字段的类型都与数据库字段类型匹配,避免因其他字段不兼容导致实例化失败。
  • 再次确认数据库中customerNumber=119的记录确实存在,且无其他字段存在无法映射的情况。

3. 验证修改

完成上述修改后重新运行代码:

  • findbyId(119)将正确返回对应实体对象
  • findAll()可正常查询所有数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:37:51