IllegalArgumentException:无法找到命名参数

问题描述 投票:0回答:1

我将Map作为以下方法的参数传递:

    public List<User> getByParameterOrAll(Map<String, String> paramsMap) {
    String email = null;
    String emailValue = null;
    String phone = null;
    String phoneValue = null;

    Iterator<Map.Entry<String, String>> entries = paramsMap.entrySet().iterator();
    while (entries.hasNext()) {
        Map.Entry<String, String> entry = entries.next();
        if (entry.getKey().equals("email")){
            email = entry.getKey();
            emailValue = entry.getValue();
        } else if (entry.getKey().equals("phone")){
            phone = entry.getKey();
            phoneValue = entry.getValue();
        }
    }

    List<User> users = em.createQuery("SELECT u FROM User u WHERE u.email=:emailValue AND u.phone=:phoneValue", User.class).
            setParameter(emailValue, email).
            setParameter(phoneValue, phone).
            getResultList();
    return users;
}

并且我赶上了“ setParameter(emailValue,email)”行

java.lang.IllegalArgumentException: Could not locate named parameter [[email protected]], expecting one of [phoneValue, emailValue]

我附上我的测试屏幕

Testing_screen

java hibernate hql entitymanager named-parameters
1个回答
0
投票

您应通过以下方式更正您的查询:

List<User> users = em.createQuery("SELECT u FROM User u WHERE u.email=:emailValue AND u.phone=:phoneValue", User.class).
            setParameter("emailValue", email).
            setParameter("phoneValue", phone).
            getResultList();
© www.soinside.com 2019 - 2024. All rights reserved.