首页 > 解决方案 > java.lang.IllegalArgumentException:名称为 [xxx] 的参数不存在

问题描述

java.lang.IllegalArgumentException:名称为 [xxx] 的参数不存在

我正在使用Spring-data-jpa+hibernate

String login = "AdanaKebap";
String userQuery = "select * from user where username like '%:login%'"; // not working
Query query = entityManager.createNativeQuery(userQuery);
query.setParameter("login", login);
List<Object[]> userObjects = query.getResultList();

我会尝试

String userQuery = "select * from user where username like '%?%'"; // not working
query.setParameter("1", login);

String userQuery = "select * from user where username like '%?1%'"; // not working
query.setParameter("1", login);

String userQuery = "select * from user where username like ':login'"; // not working
query.setParameter("login", login);

String userQuery = "select * from user where username like :login "; // not working
query.setParameter("login", login);

String userQuery = "select * from user where username = :login "; // working, but i don't need this

标签: javamysqlhibernatespring-data-jpa

解决方案


您需要使用CONCAT, 来连接%和传递给查询的值,因此请尝试:

String userQuery = "select * from user where username like CONCAT('%', ?1, '%')";
//...
query.setParameter(1, login); // note here you have to use the index of placeholder 

或者

String userQuery = "select * from user where username like CONCAT('%', :login, '%')'";
//...
query.setParameter("login", login);

推荐阅读