Hibernate原生查询在Mockito测试中无结果,数据库执行正常
Hibernate原生查询在Mockito测试中返回0条结果的排查方向
以下是几个常见的原因和排查点:
测试数据源未初始化数据
直接在数据库能查到结果是因为有现成数据,但Mockito测试环境(尤其是搭配内存数据库时)默认是空的。你需要在测试前手动插入匹配查询条件的测试数据,比如通过实体管理器保存对应的实体实例。Mock对象未正确配置返回值
如果你的测试是纯Mock(而非集成测试),直接Mock了EntityManager或Query对象,那么Hibernate不会真实执行SQL。这种情况下需要手动指定Mock的返回结果,比如:when(query.getResultList()).thenReturn(Arrays.asList(yourTestEntity));Hibernate对CTE语法的兼容性问题
部分Hibernate版本或数据库方言对WITH子句(CTE)的支持存在细节差异,比如别名处理、DISTINCT与UNION的组合逻辑。可以尝试将CTE改写为嵌套子查询,或者确认Hibernate方言配置是否与目标数据库完全匹配。查询参数不匹配
检查测试时传入查询的参数是否和数据库手动执行时一致。比如数据库执行时用的是有效ID,测试时传入的是不存在的参数值,自然返回空结果。结果映射失败
即使SQL查询到数据,若实体类与查询结果的字段(名称、类型)不匹配,Hibernate无法完成对象转换,最终返回空列表。可以开启Hibernate的show_sql日志,对比测试时执行的SQL与手动执行的是否完全一致,同时核对实体类映射配置。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

