{"record":{"id":"f030ddeea3694550","repo":"quarkusio/quarkus","slug":"limiting-to-0-values-is-not-supported-f030dd","errorCode":null,"errorMessage":"Limiting to 0 values is not supported","messagePattern":"Limiting to 0 values is not supported","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/orm/PanacheBlockingQueryImpl.java","lineNumber":43,"sourceCode":"    final Limits<BlockingDataQuery<Entity>> limitingDelegate = new Limits<BlockingDataQuery<Entity>>() {\n        @Override\n        public Limit limit() {\n            io.quarkus.panache.common.Range range = delegate.range();\n            // convert 0-based range to 1-based Jakarta Data Limit\n            return Limit.range(range.getStartIndex() + 1, range.getLastIndex() + 1);\n        }\n\n        @Override\n        public BlockingDataQuery<Entity> limit(Limit limit) {\n            // startAt is 1-based in Jakarta Data, convert to 0-based; end is inclusive, hence -1 on size\n            delegate.range((int) (limit.startAt() - 1), (int) (limit.startAt() + limit.maxResults() - 2));\n            return PanacheBlockingQueryImpl.this;\n        }\n\n        @Override\n        public BlockingDataQuery<Entity> limit(int max) {\n            if (max == 0) {\n                throw new IllegalArgumentException(\"Limiting to 0 values is not supported\");\n            }\n            // end is inclusive, hence -1 on size\n            delegate.range(0, max - 1);\n            return PanacheBlockingQueryImpl.this;\n        }\n\n        @Override\n        public BlockingDataQuery<Entity> limit(long start, int max) {\n            // end is inclusive, hence -1 on size\n            delegate.range((int) start, (int) (start + max - 1));\n            return PanacheBlockingQueryImpl.this;\n        }\n\n        @Override\n        public BlockingDataQuery<Entity> limitFrom(long start) {\n            // end is inclusive, hence -1 on size\n            // default page size of Jakarta Data is 10 (see PageRequest)\n            delegate.range((int) start, (int) (start + 10 - 1));","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/orm/PanacheBlockingQueryImpl.java#L25-L61","documentation":"PanacheBlockingQueryImpl.limit(int max) rejects max == 0 with IllegalArgumentException because the underlying Hibernate range(0, max-1) call would produce range(0,-1), which is invalid. Limiting a query to zero rows is semantically meaningless in this API, so it fails fast.","triggerScenarios":"Calling query.limit(0) — e.g. computing page size 0, an empty-limit config value, or limit(requestedSize) where requestedSize resolves to 0 (empty page request, size=0 in pagination math).","commonSituations":"Dynamic pagination where clients send size=0; feature flags or config that zero out limits; code like limit(pageSize) without guarding pageSize.","solutions":["Guard the caller: only call limit(max) when max > 0","Skip pagination entirely (return empty list without querying) when max == 0","Clamp to a minimum of 1 if a row must be returned: limit(Math.max(1, max))"],"exampleFix":"// before\nquery.limit(pageSize).list();\n// after\nif (pageSize <= 0) {\n    return Collections.emptyList();\n}\nquery.limit(pageSize).list();","handlingStrategy":"validation","validationCode":"if (max <= 0) {\n    return Collections.emptyList(); // or throw a domain-level error\n}\nquery.limit(max);","typeGuard":"boolean isValidLimit(Integer max) {\n    return max != null && max > 0;\n}","tryCatchPattern":"try {\n    return query.limit(requestedMax).list();\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"Limiting to 0\")) {\n        return Collections.emptyList();\n    }\n    throw e;\n}","preventionTips":["Always validate page size / limit values from client input before calling limit()","Treat size=0 in pagination requests as 'no results' at the service layer","Clamp configured limits to >= 1 at config load time"],"tags":["hibernate","panache","pagination","illegal-argument"],"backgroundTag":"invalid-limit-zero","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"}