{"record":{"id":"778e64d984db0a99","repo":"quarkusio/quarkus","slug":"transaction-is-not-active-consider-adding-transa-778e64","errorCode":null,"errorMessage":"Transaction is not active, consider adding @Transactional to your method to automatically activate one.","messagePattern":"Transaction is not active, consider adding @Transactional to your method to automatically activate one\\.","errorType":"exception","errorClass":"TransactionRequiredException","httpStatus":null,"severity":"error","filePath":"extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java","lineNumber":135,"sourceCode":"                case Status.STATUS_COMMITTING:\n                case Status.STATUS_MARKED_ROLLBACK:\n                case Status.STATUS_PREPARED:\n                case Status.STATUS_PREPARING:\n                    return true;\n                default:\n                    return false;\n            }\n        } catch (Exception e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public void refresh(Object entity) {\n        checkBlocking();\n        try (SessionResult emr = acquireSession()) {\n            if (!emr.allowModification) {\n                throw new TransactionRequiredException(TRANSACTION_IS_NOT_ACTIVE);\n            }\n            emr.statelessSession.refresh(entity);\n        }\n    }\n\n    @Deprecated\n    @Override\n    public Query createQuery(String qlString) {\n        checkBlocking();\n        //TODO: this needs some thought for how it works outside a tx\n        try (SessionResult emr = acquireSession()) {\n            return emr.statelessSession.createQuery(qlString);\n        }\n    }\n\n    @Override\n    public <T> Query<T> createQuery(CriteriaQuery<T> criteriaQuery) {\n        checkBlocking();","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java#L117-L153","documentation":"StatelessSession refresh requires an active transaction in Quarkus' transaction-scoped session. When the acquired session reports allowModification=false (no active JTA transaction), Quarkus throws TransactionRequiredException with a message suggesting @Transactional.","triggerScenarios":"Calling statelessSession.refresh(entity) outside a transaction — no @Transactional on the method, no manually started transaction, or the transaction already committed/rolled back before the call.","commonSituations":"Calling refresh from a non-transactional CDI bean or REST method; forgetting @Transactional when migrating code that previously used a session-per-request pattern; calling refresh after the @Transactional method boundary (e.g. in a callback).","solutions":["Annotate the calling method (or class) with @jakarta.transaction.Transactional","Join an existing transaction by calling refresh from within an already @Transactional bean method","Start a transaction programmatically via UserTransaction before calling refresh"],"exampleFix":"// before\npublic Pet load(long id) {\n    statelessSession.refresh(pet); // throws\n}\n// after\n@Transactional\npublic Pet load(long id) {\n    statelessSession.refresh(pet);\n    return pet;\n}","handlingStrategy":"validation","validationCode":"if (!statelessSession.isJoinedToTransaction()) {\n    throw new IllegalStateException(\"refresh() requires an active transaction; add @Transactional\");\n}\nstatelessSession.refresh(entity);","typeGuard":null,"tryCatchPattern":"try {\n    statelessSession.refresh(entity);\n} catch (TransactionRequiredException e) {\n    Log.error(\"No active transaction: \" + e.getMessage());\n}","preventionTips":["Annotate all service methods touching Hibernate with @Transactional","Verify transaction context before mutable StatelessSession operations","Keep refresh/get/insert calls inside the same @Transactional method"],"tags":["jpa","hibernate-orm","transactions"],"backgroundTag":"transaction-required","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"}