{"record":{"id":"dcf63430e1158f7c","repo":"quarkusio/quarkus","slug":"sort-cannot-be-used-with-named-query-add-an-orde-dcf634","errorCode":null,"errorMessage":"Sort cannot be used with named query, add an \"order by\" clause to the named query \"${namedQuery}\" instead","messagePattern":"Sort cannot be used with named query, add an \"order by\" clause to the named query \"(.+?)\" instead","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/AbstractJpaOperations.java","lineNumber":99,"sourceCode":"    public Uni<?> findById(Class<?> entityClass, Object id) {\n        return getSession(entityClass).chain(session -> find(session, entityClass, id));\n    }\n\n    public Uni<?> findById(Class<?> entityClass, Object id, LockModeType lockModeType) {\n        return getSession(entityClass)\n                .chain(session -> find(session, entityClass, id, LockModeConverter.convertToLockMode(lockModeType)));\n    }\n\n    public PanacheQueryType find(Class<?> entityClass, String panacheQuery, Object... params) {\n        return find(entityClass, panacheQuery, null, params);\n    }\n\n    public PanacheQueryType find(Class<?> entityClass, String panacheQuery, Sort sort, Object... params) {\n        Uni<SessionType> session = getSession(entityClass);\n        if (PanacheJpaUtil.isNamedQuery(panacheQuery)) {\n            String namedQuery = panacheQuery.substring(1);\n            if (sort != null) {\n                throw new IllegalArgumentException(\n                        \"Sort cannot be used with named query, add an \\\"order by\\\" clause to the named query \\\"\" + namedQuery\n                                + \"\\\" instead\");\n            }\n            NamedQueryUtil.checkNamedQuery(entityClass, namedQuery);\n            return createPanacheQuery(session, entityClass, panacheQuery, panacheQuery, sort, params);\n        }\n        String hqlQuery = PanacheJpaUtil.createFindQuery(entityClass, panacheQuery, paramCount(params));\n        return createPanacheQuery(session, entityClass, hqlQuery, panacheQuery, sort, params);\n    }\n\n    public PanacheQueryType find(Class<?> entityClass, String panacheQuery, Map<String, Object> params) {\n        return find(entityClass, panacheQuery, null, params);\n    }\n\n    public PanacheQueryType find(Class<?> entityClass, String panacheQuery, Sort sort, Map<String, Object> params) {\n        Uni<SessionType> session = getSession(entityClass);\n        if (PanacheJpaUtil.isNamedQuery(panacheQuery)) {\n            String namedQuery = panacheQuery.substring(1);","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/AbstractJpaOperations.java#L81-L117","documentation":"Panache's find() detects named queries by the leading '#'. A Sort parameter cannot be applied to a named query because sorting must be part of the query itself, so an IllegalArgumentException is thrown, directing you to add an ORDER BY clause to the named query.","triggerScenarios":"Calling PanacheCriteria/AbstractJpaOperations.find(entityClass, \"#NamedQuery\", Sort.descending(\"name\"), params...) — i.e. any find/list overloads that take both a '#'-prefixed named query and a non-null Sort.","commonSituations":"Reusing a find-with-sort helper against a named query constant; switching a HQL string to a named query while keeping the Sort argument.","solutions":["Remove the Sort argument and add 'ORDER BY <column>' inside the @NamedQuery HQL","Keep the sort in the query string and pass Sort.nullValue() / null","Convert the named query back to an inline HQL/panache query if dynamic sorting is needed"],"exampleFix":"// before\nNamedQueries: @NamedQuery(name=\"Person.findByName\", query=\"from Person p where p.name = :name\")\nfind(\"#Person.findByName\", Sort.descending(\"name\"), name)\n// after\n@NamedQuery(name=\"Person.findByName\", query=\"from Person p where p.name = :name order by p.name desc\")\nfind(\"#Person.findByName\", name)","handlingStrategy":"try-catch","validationCode":"if (panacheQuery.startsWith(\"#\") && sort != null)\n    throw new IllegalArgumentException(\"Passing Sort with named query \" + panacheQuery + \" is not allowed\");","typeGuard":null,"tryCatchPattern":"try {\n    return operations.find(entityClass, query, sort, params);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"Sort cannot be used with named query\")) {\n        throw new IllegalArgumentException(\"Move ordering into the named query's ORDER BY clause\", e);\n    }\n    throw e;\n}","preventionTips":["Embed ORDER BY in named queries","Never pass Sort when the query string starts with '#'","Centralize query constants so named-query usage is greppable"],"tags":["quarkus","panache","hibernate-reactive","named-query","sort"],"backgroundTag":"sort-with-named-query","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}