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将找不到我命名的参数?

+0

尝试使用'select * from客户端c加入clientcategory cc on c.id = cc.client_id where match(cc.clientkeyword)against(:searchKey in boolean mode)' – Amogh

+0

您可以在'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

+0

我已经整理好你的代码和异常块。确保你已经彻底研究过这个例外。这应该是一个相当简单的修复。 – JamesENL

有没有必要把单引号'为参数占位符':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个参数

  1. 参数
  2. 参数名称参数指定数据类型值
  3. 休眠类型

有关方法Plz的详细信息,请参阅Hibernate doc