使用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
相关产品推荐
相关产品推荐

