{"record":{"id":"a6b45a3edcecbc4e","repo":"hibernate/hibernate-orm","slug":"detached-entity-passed-to-persist-getloggablena","errorCode":null,"errorMessage":"Detached entity passed to persist: ${getLoggableName(event.getEntityName(), entity)}","messagePattern":"Detached entity passed to persist: (.+?)","errorType":"exception","errorClass":"PersistentObjectException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java","lineNumber":83,"sourceCode":"\t\t\t\t\tthrow new PersistentObjectException( \"Uninitialized proxy passed to persist()\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpersist( event, createCache, lazyInitializer.getImplementation() );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tpersist( event, createCache, object );\n\t\t}\n\t}\n\n\tprivate void persist(@Nonnull PersistEvent event, @Nonnull PersistContext createCache, @Nonnull Object entity) {\n\t\tfinal var source = event.getSession();\n\t\tfinal var entityEntry = source.getPersistenceContextInternal().getEntry( entity );\n\t\tfinal String entityName = entityName( event, entity, entityEntry );\n\t\tswitch ( getEntityState( entity, entityName, entityEntry, source, true ) ) {\n\t\t\tcase DETACHED:\n\t\t\t\tthrow new PersistentObjectException( \"Detached entity passed to persist: \"\n\t\t\t\t\t\t\t\t\t\t+ getLoggableName( event.getEntityName(), entity) );\n\t\t\tcase PERSISTENT:\n\t\t\t\tentityIsPersistent( event, createCache );\n\t\t\t\tbreak;\n\t\t\tcase TRANSIENT:\n\t\t\t\tentityIsTransient( event, createCache );\n\t\t\t\tbreak;\n\t\t\tcase DELETED:\n\t\t\t\tentityEntry.setStatus( Status.MANAGED );\n\t\t\t\tentityEntry.setDeletedState( null );\n\t\t\t\tsource.getActionQueue().unScheduleDeletion( entityEntry, event.getObject() );\n\t\t\t\tentityIsDeleted( event, createCache );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new ObjectDeletedException( \"Deleted entity passed to persist\", null,\n\t\t\t\t\t\t\t\t\t\tgetLoggableName( entityName, entity ) );\n\t\t}\n\t}","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java#L65-L101","documentation":"Error \"Detached entity passed to persist: ${getLoggableName(event.getEntityName(), entity)}\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown when persist() is called with an entity that already has a persistent identity (detached instance).","commonSituations":"Typical situations: re-persisting an entity loaded in a previous session; calling persist instead of merge on a detached object; ids assigned manually before persist.","solutions":["Use merge() instead of persist() for detached entities.","Set the identifier to null (for generated ids) if you intend to insert a brand-new row."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}