quarkusio/quarkus · error · WebApplicationException
Id was invalidly set on request.
Error message
Id was invalidly set on request.
What it means
Same as errorIndex 3950 but in the datasource-variant FruitResource: POST rejects a body whose id is already set with HTTP 422 because identifiers must be generated by the persistence layer, not supplied by clients.
Source
Thrown at integration-tests/hibernate-orm-tenancy/datasource/src/main/java/io/quarkus/it/hibernate/multitenancy/fruit/FruitResource.java:91
}
@POST
@Transactional
@Path("fruits")
public Response createDefault(@NotNull Fruit fruit) {
return create(fruit);
}
@POST
@Transactional
@Path("{tenant}/fruits")
public Response createTenant(@NotNull Fruit fruit) {
return create(fruit);
}
private Response create(@NotNull Fruit fruit) {
if (fruit.getId() != null) {
throw new WebApplicationException("Id was invalidly set on request.", 422);
}
LOG.debugv("Create {0}", fruit.getName());
entityManager.persist(fruit);
return Response.ok(fruit).status(201).build();
}
@PUT
@Path("fruits/{id}")
@Transactional
public Fruit updateDefault(@PathParam("id") int id, @NotNull Fruit fruit) {
return update(id, fruit);
}
@PUT
@Path("{tenant}/fruits/{id}")
@Transactional
public Fruit updateTenant(@PathParam("id") int id, @NotNull Fruit fruit) {
return update(id, fruit);View on GitHub (pinned to e1c734241f)
Solutions
- Omit the id (or null it) in the POST body.
- Use PUT /fruits/{id} for updates.
- Configure the client serializer to skip the id on create.
Example fix
// before
{"id": 7, "name": "Cherry"}
// after
{"name": "Cherry"} Defensive patterns
Strategy: validation
Validate before calling
if (fruit.getId() != null) {
fruit = new Fruit(fruit.getName()); // strip id before create
} Type guard
boolean isNewFruit(io.quarkus.it.hibernate.multitenancy.fruit.Fruit f) {
return f != null && f.getId() == null;
} Try / catch
try (Response r = target("/fruits").request().post(Entity.json(fruit))) {
if (r.getStatus() == 422) { /* id was set; retry without id */ }
} Prevention
- Separate Create DTO (no id) from Update DTO
- Null out id before POST
- Never POST an object previously returned by GET
- Test create payloads against a schema that forbids id
When it happens
Trigger: POST a Fruit JSON body containing a non-null "id" field to the datasource-based /fruits endpoint.
Common situations: Reusing a fetched entity object for create, client DTO defaults id, or POST used instead of PUT for updates.
Related errors
- Id was invalidly set on request.
- Fruit Name was not set on request.
- Fruit Name was not set on request.
- Id was invalidly set on request.
- Id was invalidly set on request.
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/fb9d2ec99aa8a692.
Report an issue: GitHub.