{"record":{"id":"2edeaeae6c834161","repo":"hibernate/hibernate-orm","slug":"unknown-actionqueue-implementation-s-valid-valu","errorCode":null,"errorMessage":"Unknown ActionQueue implementation: %s. Valid values are 'graph' and 'legacy'.","messagePattern":"Unknown ActionQueue implementation: (.+?)\\. Valid values are 'graph' and 'legacy'\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/action/queue/spi/QueueType.java","lineNumber":40,"sourceCode":"\t/// which requires hard-coded ordering and manual sorting of actions\n\tLEGACY;\n\n\tpublic static QueueType fromSetting(Object setting) {\n\t\tif ( setting != null ) {\n\t\t\tif ( setting instanceof QueueType queueType ) {\n\t\t\t\treturn queueType;\n\t\t\t}\n\t\t\treturn QueueType.fromSetting( setting.toString() );\n\t\t}\n\n\t\treturn GRAPH;\n\t}\n\n\tpublic static QueueType fromSetting(String setting) {\n\t\treturn switch ( setting.toLowerCase() ) {\n\t\t\tcase \"legacy\" -> LEGACY;\n\t\t\tcase \"graph\" -> GRAPH;\n\t\t\tdefault -> throw new IllegalArgumentException(\n\t\t\t\t\t\"Unknown ActionQueue implementation: \" + setting +\n\t\t\t\t\t\". Valid values are 'graph' and 'legacy'.\"\n\t\t\t);\n\t\t};\n\t}\n}\n","sourceCodeStart":22,"sourceCodeEnd":47,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/action/queue/spi/QueueType.java#L22-L47","documentation":"At SessionFactory bootstrap Hibernate parses the hibernate.flush.queue.type setting (FlushSettings.FLUSH_QUEUE_TYPE) through QueueType.fromSetting. Only 'graph' (the new 8.0 graph-based ActionQueue, the default) and 'legacy' (the traditional hard-coded-ordering queue) are accepted, case-insensitively; any other string throws IllegalArgumentException and startup fails. The message deliberately lists the valid values.","triggerScenarios":"Setting hibernate.flush.queue.type in persistence.xml, application.yaml/properties, or a programmatic settings map to a misspelled or outdated value such as 'new', 'default', or a value carried over from another Hibernate line.","commonSituations":"Copy-pasted configuration from an older Hibernate project or a blog post; trailing whitespace in yaml values; typo; settings files migrated between environments.","solutions":["Set the property to exactly 'graph' or 'legacy' (any case).","Remove the property entirely - the default is GRAPH.","Check for trailing spaces, quotes, or environment-variable interpolation errors in the value."],"exampleFix":"# before\nhibernate.flush.queue.type=new\n# after\nhibernate.flush.queue.type=legacy","handlingStrategy":"validation","validationCode":"// fail with a clear message before SessionFactory bootstrap\nString v = settings.get(\"hibernate.flush.queue.type\");\nif (v != null && !Set.of(\"graph\", \"legacy\").contains(v.toLowerCase(Locale.ROOT))) {\n    throw new IllegalArgumentException(\"hibernate.flush.queue.type must be 'graph' or 'legacy', got: \" + v);\n}","typeGuard":null,"tryCatchPattern":"try {\n    sessionFactory = new Configuration().buildSessionFactory();\n}\ncatch (IllegalArgumentException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"Unknown ActionQueue implementation\")) {\n        // fix the hibernate.flush.queue.type value to 'graph' or 'legacy'\n    }\n    throw e;\n}","preventionTips":["Validate the setting once in a config test or startup check instead of relying on bootstrap failure","Omit hibernate.flush.queue.type unless you specifically need the legacy queue","Beware yaml trailing whitespace and copy-pasted values from other Hibernate versions"],"tags":["hibernate","configuration","startup","action-queue"],"backgroundTag":"invalid-configuration-value","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}