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

