{"record":{"id":"3e506aecb5d13c3a","repo":"quarkusio/quarkus","slug":"spring-transactional-with-propagation-nested-is-n","errorCode":null,"errorMessage":"Spring @Transactional with propagation NESTED is not supported by Quarkus. Offending location: <target>","messagePattern":"Spring @Transactional with propagation NESTED is not supported by Quarkus\\. Offending location: <target>","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/spring-tx/deployment/src/main/java/io/quarkus/spring/tx/deployment/SpringTransactionalProcessor.java","lineNumber":40,"sourceCode":"    @BuildStep\n    FeatureBuildItem feature() {\n        return new FeatureBuildItem(Feature.SPRING_TX);\n    }\n\n    @BuildStep\n    AnnotationsTransformerBuildItem transform() {\n        return new AnnotationsTransformerBuildItem(new SpringTransactionalAnnotationsTransformer());\n    }\n\n    @BuildStep\n    @Produce(ServiceStartBuildItem.class)\n    void validateTransactionalAnnotations(CombinedIndexBuildItem combinedIndex) {\n        Collection<AnnotationInstance> instances = combinedIndex.getIndex()\n                .getAnnotations(SPRING_TRANSACTIONAL);\n        for (AnnotationInstance instance : instances) {\n            AnnotationValue propagationValue = instance.value(\"propagation\");\n            if (propagationValue != null && \"NESTED\".equals(propagationValue.asEnum())) {\n                throw new IllegalArgumentException(\n                        \"Spring @Transactional with propagation NESTED is not supported by Quarkus. \"\n                                + \"Offending location: \"\n                                + SpringTransactionalUtil.describeTarget(instance.target()));\n            }\n        }\n    }\n}\n","sourceCodeStart":22,"sourceCodeEnd":48,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/spring-tx/deployment/src/main/java/io/quarkus/spring/tx/deployment/SpringTransactionalProcessor.java#L22-L48","documentation":"SpringTransactionalProcessor.validateTransactionalAnnotations fails the build at deployment time when a Spring @Transactional annotation declares propagation = NESTED, which Quarkus/Narayana's Spring-compatible layer does not implement. The message names the offending location via SpringTransactionalUtil.describeTarget.","triggerScenarios":"Using org.springframework.transaction.annotation.Transactional(propagation = Propagation.NESTED) on a bean method/class in a Quarkus application that includes the quarkus-spring-tx extension.","commonSituations":"Porting a Spring Boot app to Quarkus that relied on JDBC savepoints for partial rollback; copy-pasting Spring configuration including NESTED propagation; Spring migration guides recommending NESTED for nested transactions.","solutions":["Replace Propagation.NESTED with Propagation.REQUIRED (or another supported value such as REQUIRES_NEW)","Refactor the method so partial rollback is handled with explicit exception handling inside a single transaction","Remove the propagation attribute entirely to use the default REQUIRED behavior","If savepoint semantics are essential, use jakarta.transaction APIs / transactional semantics Quarkus supports"],"exampleFix":"// before\n@Transactional(propagation = Propagation.NESTED)\npublic void doWork() {...}\n// after\n@Transactional(propagation = Propagation.REQUIRED)\npublic void doWork() {...}","handlingStrategy":"validation","validationCode":"// search the codebase before building:\n// grep -r 'Propagation.NESTED' src/  -> must return nothing when using quarkus-spring-tx","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never use Propagation.NESTED with quarkus-spring-tx","Migrate NESTED usage to REQUIRED plus in-method exception handling","Check for NESTED when porting Spring Boot projects to Quarkus","Note this fails at build time, so run a compile early in migration"],"tags":["quarkus","spring-tx","transactions","build-time","unsupported-feature"],"backgroundTag":"unsupported-transaction-propagation","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"}