quarkusio/quarkus · error · RuntimeException

Wrong result from named JPA query

Error message

Wrong result from named JPA query

What it means

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.

Source

Thrown at integration-tests/jpa-mysql/src/main/java/io/quarkus/it/jpa/mysql/JPAFunctionalityTestEndpoint.java:73

                throw new RuntimeException("Incorrect order of results");
            }
            StringBuilder sb = new StringBuilder("list of stored Person names:\n\t");
            for (Person p : allpersons) {
                p.describeFully(sb);
            }
            sb.append("\nList complete.\n");
            System.out.print(sb);
        });

        //Try a JPA named query:
        QuarkusTransaction.requiringNew().run(() -> {
            TypedQuery<Person> typedQuery = em.createNamedQuery(
                    "get_person_by_name", Person.class);
            typedQuery.setParameter("name", "Quarkus");
            final Person singleResult = typedQuery.getSingleResult();

            if (!singleResult.getName().equals("Quarkus")) {
                throw new RuntimeException("Wrong result from named JPA query");
            }
        });

        cleanUpData();

        return "OK";
    }

    private void cleanUpData() {
        QuarkusTransaction.requiringNew()
                .run(() -> em.createNativeQuery("Delete from Person").executeUpdate());
    }

    private void persistNewPerson(String name) {
        Person person = new Person();
        person.setName(name);
        person.setAddress(new Address("Street " + randomName()));
        em.persist(person);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Open Person.java and verify the @NamedQuery JPQL: 'select p from Person p where p.name = :name'
  2. Log/inspect the returned entity to see which row was actually matched
  3. Re-seed data so a Person named 'Quarkus' exists before running the query
  4. Confirm the named query is registered on the correct entity

Example fix

// before (in Person entity)
@NamedQuery(name = "get_person_by_name", query = "select p from Person p where p.name = :name")
// verify persisted row
if (!singleResult.getName().equals("Quarkus")) {
    throw new RuntimeException("Wrong result from named JPA query: " + singleResult.getName());
}
Defensive patterns

Strategy: validation

Validate before calling

// verify named query exists and data present before getSingleResult
List<Person> matches = em.createQuery("select p from Person p where p.name = :name", Person.class)
        .setParameter("name", "Quarkus").getResultList();
if (matches.size() != 1) {
    throw new IllegalStateException("Expected exactly 1 'Quarkus' Person, got " + matches.size());
}

Try / catch

try {
    Person p = typedQuery.getSingleResult();
} catch (NoResultException | NonUniqueResultException e) {
    throw new AssertionError("named query 'get_person_by_name' returned invalid result", e);
}

Prevention

When it happens

Trigger: 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.

Common situations: @NamedQuery JPQL edited or misaligned with the entity field, multiple rows matching causing getSingleResult ambiguity issues, or stale seeded data.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/3b5418cace728732. Report an issue: GitHub.