【问题标题】:IllegalArgumentException: Could not locate named parameter [surname], expecting one of [name]IllegalArgumentException:找不到命名参数 [surname],期待 [name] 之一
【发布时间】:2021-04-20 06:34:42
【问题描述】:

我的 studentRepository 类:

    private static EntityManagerFactory emf = null;

    public EntityManager em() {
        if (emf == null) {
            emf = Persistence.createEntityManagerFactory("teachermanagementPU");
        }
        EntityManager entityManager = emf.createEntityManager();
        return entityManager;
    }

    public List<StudentEntity> getAll(String name, String surname, Integer age, BigDecimal scholarship) {
        String jpql = "select u from StudentEntity u where 1=1";

        if (name != null && !name.trim().isEmpty()) {
            jpql += "and u.name=:name";
        }

        if (surname != null && !surname.trim().isEmpty()) {
            jpql += "and u.surname=:surname";
        }

        if (age != null) {
            jpql += "and u.age=:age";
        }
        if (scholarship != null) {
            jpql += "and u.scholarship=:scholarship";
        }

        EntityManager em = em();//JPQL
        Query query = em.createQuery(jpql, StudentEntity.class);

        if (name != null && name.trim().isEmpty()) {
            query.setParameter("name", name);
        }

        if (surname != null && surname.trim().isEmpty()) {
            query.setParameter("surname", surname);
        }

        if (age != null) {
            query.setParameter("age", age);
        }

        if (scholarship != null) {
            query.setParameter("scholarship", scholarship);
        }
        List<StudentEntity> students = query.getResultList();
        em.close();
        return students;
    }

我收到错误 IllegalArgumentException:找不到命名参数 [surname],期待 [name] 之一 Students.jsp 类:

StudentRepository studentRepository = new StudentRepository();
List<StudentEntity> students = studentRepository.getAll(
        request.getParameter("name"),
        request.getParameter("surname"),
        request.getParameter("age") != null && !request.getParameter("age").isEmpty() ? Integer.parseInt(request.getParameter("age")) : null,
        request.getParameter("scholarship") != null && !request.getParameter("scholarship").isEmpty() ? new BigDecimal(request.getParameter("scholarship")) : null);

【问题讨论】:

    标签: jpa illegalargumentexception


    【解决方案1】:

    连接字符串时需要加一个空格:

    if (name != null && !name.trim().isEmpty()) {
        jpql += " and u.name=:name ";
    }
    

    其他地方也一样。

    你也忘记了感叹号!

    if (surname != null && !surname.trim().isEmpty()) {
                    
        query.setParameter("surname", surname);
    
    }
    

    你可以使用isBlank:

    if (surname != null && !surname.isBlank()) {
        ...
    }
    

    【讨论】:

    • if (name != null && !name.trim().isEmpty()) { jpql += " and u.name=:name "; } if (surname != null && !surname.trim().isEmpty()) { jpql += " and u.surname=:surname "; } if (age != null) { jpql += " and u.age=:age "; } if (scholarship != null) { jpql += " and u.scholarship=:scholarship "; }
    • 我添加了空格,但它再次给出了同样的错误
    • 我没有忘记感叹号。 isBlank() 在 IntelliJ IDEA 中不起作用
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2020-09-18
    • 2015-03-29
    • 2012-09-08
    • 2012-11-03
    • 2017-11-21
    • 2011-09-11
    • 2016-10-21
    相关资源
    最近更新 更多