日期:2014-05-18  浏览次数:20913 次

SSH开发,Hibenrate在setParameter时报错,提示could not locate named parameter

public T getByHql(String hql, Map<String, Object> params) {
Query q = getCurrentSession().createQuery(hql);
if (params != null && !params.isEmpty()) {
for (String key : params.keySet()) {
q.setParameter(key, params.get(key));
}
}
List<T> l = q.list();
if (l != null && l.size() > 0) {
return l.get(0);
}
return null;
}

在运行时Struts报错

Struts Problem Report

Struts has detected an unhandled exception:

Messages:
could not locate named parameter [param71]
File: org/hibernate/engine/query/spi/ParameterMetadata.java
Line number: 100
————————————————————————————————————————————————————————————————
Stacktraces

org.hibernate.QueryParameterException: could not locate named parameter [param71]
    org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:100)
    org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:106)
    org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:466)
    org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:436)
    teamFive.dao.impl.BaseDAOImpl.getByHql(BaseDAOImpl.java:61)
以下省略……

调试时截图如下



查询语句和传入参数没有发现什么不对的地方,整了半天头不知道为什么
因为是第一次整合SSH,所以很多地方都没经验,还请高人解答……
------解决方案--------------------
params里面没有param71?
------解决方案--------------------
应该是key值传错了,在hql中前一个参数应该传的是实体类的属性名称或者顺序,param71应该没有这个属性名的把
------解决方案--------------------
应该是有空格或者别的什么东西,看看你的params是什么东西。
应该trim()下
------解决方案--------------------
参数找不到了。
------解决方案--------------------
是不是参数类型不对了。。