{"record":{"id":"3b5418cace728732","repo":"quarkusio/quarkus","slug":"wrong-result-from-named-jpa-query-3b5418","errorCode":null,"errorMessage":"Wrong result from named JPA query","messagePattern":"Wrong result from named JPA query","errorType":"http","errorClass":"RuntimeException","httpStatus":500,"severity":"error","filePath":"integration-tests/jpa-mysql/src/main/java/io/quarkus/it/jpa/mysql/JPAFunctionalityTestEndpoint.java","lineNumber":73,"sourceCode":"                throw new RuntimeException(\"Incorrect order of results\");\n            }\n            StringBuilder sb = new StringBuilder(\"list of stored Person names:\\n\\t\");\n            for (Person p : allpersons) {\n                p.describeFully(sb);\n            }\n            sb.append(\"\\nList complete.\\n\");\n            System.out.print(sb);\n        });\n\n        //Try a JPA named query:\n        QuarkusTransaction.requiringNew().run(() -> {\n            TypedQuery<Person> typedQuery = em.createNamedQuery(\n                    \"get_person_by_name\", Person.class);\n            typedQuery.setParameter(\"name\", \"Quarkus\");\n            final Person singleResult = typedQuery.getSingleResult();\n\n            if (!singleResult.getName().equals(\"Quarkus\")) {\n                throw new RuntimeException(\"Wrong result from named JPA query\");\n            }\n        });\n\n        cleanUpData();\n\n        return \"OK\";\n    }\n\n    private void cleanUpData() {\n        QuarkusTransaction.requiringNew()\n                .run(() -> em.createNativeQuery(\"Delete from Person\").executeUpdate());\n    }\n\n    private void persistNewPerson(String name) {\n        Person person = new Person();\n        person.setName(name);\n        person.setAddress(new Address(\"Street \" + randomName()));\n        em.persist(person);","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/integration-tests/jpa-mysql/src/main/java/io/quarkus/it/jpa/mysql/JPAFunctionalityTestEndpoint.java#L55-L91","documentation":"Assertion in the jpa-mysql test endpoint after executing the named query 'get_person_by_name' with parameter name='Quarkus'. The single result returned was not the Person named 'Quarkus', meaning the named query definition or the persisted data does not match expectations.","triggerScenarios":"em.createNamedQuery(\"get_person_by_name\", Person.class).setParameter(\"name\", \"Quarkus\").getSingleResult() returning an entity whose name differs — usually a mis-defined @NamedQuery in the Person entity or wrong row stored.","commonSituations":"@NamedQuery JPQL edited or misaligned with the entity field, multiple rows matching causing getSingleResult ambiguity issues, or stale seeded data.","solutions":["Open Person.java and verify the @NamedQuery JPQL: 'select p from Person p where p.name = :name'","Log/inspect the returned entity to see which row was actually matched","Re-seed data so a Person named 'Quarkus' exists before running the query","Confirm the named query is registered on the correct entity"],"exampleFix":"// before (in Person entity)\n@NamedQuery(name = \"get_person_by_name\", query = \"select p from Person p where p.name = :name\")\n// verify persisted row\nif (!singleResult.getName().equals(\"Quarkus\")) {\n    throw new RuntimeException(\"Wrong result from named JPA query: \" + singleResult.getName());\n}","handlingStrategy":"validation","validationCode":"// verify named query exists and data present before getSingleResult\nList<Person> matches = em.createQuery(\"select p from Person p where p.name = :name\", Person.class)\n        .setParameter(\"name\", \"Quarkus\").getResultList();\nif (matches.size() != 1) {\n    throw new IllegalStateException(\"Expected exactly 1 'Quarkus' Person, got \" + matches.size());\n}","typeGuard":null,"tryCatchPattern":"try {\n    Person p = typedQuery.getSingleResult();\n} catch (NoResultException | NonUniqueResultException e) {\n    throw new AssertionError(\"named query 'get_person_by_name' returned invalid result\", e);\n}","preventionTips":["Keep @NamedQuery JPQL in sync with entity fields","Use getResultList + size checks instead of getSingleResult in tests","Re-seed data in a committed transaction before querying"],"tags":["jpa","named-query","mysql","integration-test"],"backgroundTag":"jpa-named-query-wrong-result","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"}