{"record":{"id":"de6c0e97d165b783","repo":"quarkusio/quarkus","slug":"stateless-operations-not-supported","errorCode":null,"errorMessage":"Stateless operations not supported","messagePattern":"Stateless operations not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/hr/ManagedReactiveOperations.java","lineNumber":30,"sourceCode":"import io.quarkus.data.hibernate.runtime.spi.PanacheReactiveOperations;\nimport io.smallrye.mutiny.Uni;\n\npublic class ManagedReactiveOperations implements PanacheReactiveOperations {\n\n    public final static ManagedReactiveOperations INSTANCE = new ManagedReactiveOperations();\n    private final static ManagedReactiveJpaOperations DELEGATE = new ManagedReactiveJpaOperations();\n\n    private ManagedReactiveOperations() {\n    }\n\n    @Override\n    public Uni<Mutiny.Session> getSession(Class<?> entityClass) {\n        return DELEGATE.getSession(entityClass);\n    }\n\n    @Override\n    public Uni<Mutiny.StatelessSession> getStatelessSession(Class<?> entityClass) {\n        throw new UnsupportedOperationException(\"Stateless operations not supported\");\n    }\n\n    @Override\n    public Uni<Void> insert(Object entity) {\n        throw new UnsupportedOperationException(\"Stateless operations not supported\");\n    }\n\n    @Override\n    public Uni<Void> persist(Object entity) {\n        return DELEGATE.persist(entity);\n    }\n\n    @Override\n    public Uni<Void> persistAndFlush(Object entity) {\n        return DELEGATE.persist(entity)\n                .chain(v -> DELEGATE.flush(entity.getClass()));\n    }\n","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/hr/ManagedReactiveOperations.java#L12-L48","documentation":"The quarkus-data-hibernate runtime's ManagedReactiveOperations implements the HR (hibernate-reactive) operations contract, but its getStatelessSession(Class) method is intentionally unimplemented: stateless session support is not available in this integration, so it unconditionally throws UnsupportedOperationException instead of delegating like the regular session methods do.","triggerScenarios":"Calling getStatelessSession(...) on ManagedReactiveOperations — e.g. application or library code that uses the stateless-session API of the reactive Hibernate operations facade (a stateless insert/update/delete or bulk path) inside a Quarkus app using this extension.","commonSituations":"Migrating code written against plain Hibernate Reactive stateless sessions to Quarkus' data module; switching from a different persistence layer that supported stateless sessions; upgrading Quarkus and assuming stateless API parity.","solutions":["Do not use stateless session APIs: use the supported regular reactive session operations (persist, merge, remove via getSession) instead.","If you need stateless-session semantics for bulk writes, use a panache/repository approach or plain Hibernate Reactive (SessionFactory#withStatelessSession) directly instead of this facade.","Check the Quarkus version/changelog for when stateless support is added to this runtime, and upgrade if available.","Refactor the calling code to replace getStatelessSession usage with Mutiny.Session obtained from getSession(entityClass)."],"exampleFix":"// before\nUni<Mutiny.StatelessSession> ss = ops.getStatelessSession(MyEntity.class);\n\n// after\nUni<Mutiny.Session> session = ops.getSession(MyEntity.class);\nreturn session.chain(s -> s.persist(new MyEntity()));","handlingStrategy":"type-guard","validationCode":"// before calling the stateless API, verify the facade supports it\nif (ops instanceof ManagedReactiveOperations mro) {\n    // getStatelessSession is unsupported; route to getSession-based logic instead\n}","typeGuard":"boolean supportsStateless(ManagedReactiveOperations ops) {\n    return false; // this implementation never supports stateless sessions\n}","tryCatchPattern":"try {\n    return ops.getStatelessSession(entityClass);\n} catch (UnsupportedOperationException e) {\n    if (e.getMessage() != null && e.getMessage().equals(\"Stateless operations not supported\")) {\n        // fall back to session-based operations\n        return ops.getSession(entityClass).map(s -> null); // adapt path\n    }\n    throw e;\n}","preventionTips":["Do not call stateless-session methods on ManagedReactiveOperations; use getSession/persist/merge.","When porting from plain Hibernate Reactive, map stateless usage to session-based equivalents at design time.","Write a small contract test that fails if new code references stateless methods on this facade.","Track Quarkus releases for stateless-session support in quarkus-data-hibernate."],"tags":["hibernate","reactive","unsupported-operation","stateless-session","quarkus"],"backgroundTag":"unsupported-operation","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}