java - 具有该名称 [<name>] 的 hibernate 参数不存在

标签 java hibernate jpa hql entitymanager

我正在运行以下代码。

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/

相关文章:

java - RestEasy + hibernate + JBoss EAP 5.1.1

java - 如何扩展 JPA 实体以仅添加组合

Java 无法打开/创建首选项错误

java - 仅将 Map 或映射文件与 Hibernate 一起使用

java - Cucumber 在 4.7 中弃用了 Given/Then/When - 它们应该被什么取代?

java - spring 4 mvc + Hibernate + Annotations 配置堆内存问题

java - @Transient 在 JPA 中无法正常工作

java - Spring Framework 3.2.8 中的 org.eclipse.persistence.exceptions.ValidationException

java - 在 Spring 中以编程方式启用和禁用某些 @RabbitListener?

JavaMail 和电子邮件帐户的连接