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

Hibernate查询参数传递问题:数据库有结果代码返回空集

排查Hibernate原生SQL查询无结果的问题

我来帮你一步步排查这个问题,从你给出的信息里能看到几个关键的错误点:

  • 字段名拼写错误(最直接的原因)
    对比你在数据库里执行的SQL和代码中定义的SQL:
    数据库里的外层查询条件是 upper(column3) like upper('abcde%'),但代码里写的却是 upper(column4) like upper(:searchString)——你把column3写成了column4!这会导致外层查询完全匹配不到数据,直接返回空集。

  • 参数未添加通配符%
    你在数据库执行时用的是带%的模糊匹配(比如'abc%'),但如果代码中传入的minimzedSearchString和s参数只是纯字符串(比如仅传入abc而没有abc%),那么like条件根本无法匹配到数据。Hibernate不会自动为参数添加通配符,你需要在传入参数时手动拼接:

    .setParameter("minimzedSearchString", minimzedSearchString + "%")
    .setParameter("searchString", s + "%")
    
  • 原生SQL查询未指定实体映射
    createSQLQuery()方法默认返回的是Object[]类型的列表,而不是Table1实体对象。你直接强转成List<Table1>虽然不会立即报错,但实际上得到的不是你期望的实体实例,可能表现为空或者类型异常。正确的做法是调用addEntity()指定返回的实体类型:

    List<Table1> list = (List<Table1>) currentSession()
        .createSQLQuery(SQL)
        .addEntity(Table1.class) // 必须添加这行来映射实体
        .setParameter("minimzedSearchString", minimzedSearchString + "%")
        .setParameter("searchString", s + "%")
        .setParameter("max", max)
        .list();
    

先优先修复字段名的错误,再检查通配符和实体映射的问题,应该就能解决查询无结果的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:52:58