【发布时间】:2017-07-10 10:29:48
【问题描述】:
我正在运行以下代码。
用户服务.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);
DB.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
如果参数在控制台中打印,那么是什么原因导致出现非法参数异常?
请帮忙!
【问题讨论】:
-
你的类
clues.catalog.user.User被声明为实体了吗? -
是的。导入 javax.persistence.Column;导入 javax.persistence.Entity;导入 javax.persistence.Table; @Entity @Table(name = "cscart_users") public class User { @Column(name = "user_id") public Long userId;
-
可能是字符串连接出了点问题,因为他说他在查询中找不到 :id 参数...您可以尝试使用正确的字符串进行创建查询吗? entityManager.createQuery("SELECT u.email FROM questions.catalog.user.User u WHERE u.userId = :id");
-
拥有完整的堆栈跟踪可能会有所帮助
标签: java hibernate jpa hql entitymanager