我正在运行以下代码。
UserService.java
String alias = "u";
String select = "SELECT u.email";
String where = "u.userId = :id";
Map<String, Object> params = new HashMap<>();
params.put("id", userId);
List<User> users = db.findRecords(User.class, alias, select, where, params);
数据库.java
public <T> List<T> findRecords(Class<T> entityClass, String entityAlias, String select, String where, Map<String, Object> params) {
String sql = select + " FROM " + entityClass.getName() + " " + entityAlias;
if (where != null) {
sql = sql + " WHERE " + where;
}
Query query = entityManager.createQuery(sql);
System.out.println(sql);
if (!params.isEmpty()) {
Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, Object> entry = iterator.next();
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
query.setParameter((String) entry.getKey(), (Long) entry.getValue());
}
}
return query.getResultList();
}
我收到以下错误日志。
SELECT u.email FROM com.catalog.user.User u WHERE u.userId = :id
key: id, value: 28636907
Caused by: java.lang.IllegalArgumentException: Parameter with that name [id] did not exist
如果参数在控制台中打印,那么是什么导致出现非法参数异常?
请帮忙!
最佳答案
1) 检查参数名称 :id
是否有拼写错误。它区分大小写。
2) 尝试执行不带参数的查询。这可能是实体映射中的问题。
3) 尝试直接在查询中设置参数,而不使用HashMap
。
关于java - 具有该名称 [<name>] 的 hibernate 参数不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009717/