Hibernate无法找到名为的参数异常
问题描述:
我的异常消息是: Hibernate无法找到名为的参数异常
org.hibernate.QueryParameterException: could not locate named parameter [searchKey] at
org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148) at
org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165) at
org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523) at
org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493) at
com.si.bse.dao.impl.SearchDaoImpl.getClientList(SearchDaoImpl.java:99) at
com.si.bse.services.impl.SearchServicesImpl.getClientList(SearchServicesImpl.java:32)
和被扔是代码:
@SuppressWarnings("unchecked")
@Transactional
@Override
public List<Client> getClientList(String searchWord) {
String sql = "select * from client c join clientcategory cc on c.id=cc.client_id where match(cc.clientkeyword) against(':searchKey' in boolean mode)";
SQLQuery query = (SQLQuery) getCurrentSession().createSQLQuery(sql).addEntity(Client.class).setParameter("searchKey", searchWord);
List result = query.list();
return result;
}
为什么Hibernate将找不到我命名的参数?
答
有没有必要把单引号'
为参数占位符':searchKey'
。删除引号可能会解决您的问题。
所以查询将是:
select * from client c join clientcategory cc on c.id=cc.client_id where match(cc.clientkeyword) against(:searchKey in boolean mode)
可以使用重载的setParameter(),它接受3个参数
- 参数
- 参数名称参数指定数据类型值
- 休眠类型
有关方法Plz的详细信息,请参阅Hibernate doc。
尝试使用'select * from客户端c加入clientcategory cc on c.id = cc.client_id where match(cc.clientkeyword)against(:searchKey in boolean mode)' – Amogh
您可以在'setParameter'中指定参数类型。看看https://docs.jboss.org/hibernate/core/3.2/api/org/hibernate/Query.html#setParameter%28java.lang.String,%20java.lang.Object,%20org.hibernate.type .Type%29 – Amogh
我已经整理好你的代码和异常块。确保你已经彻底研究过这个例外。这应该是一个相当简单的修复。 – JamesENL