hibernate/hibernate-orm · error · PersistentObjectException
Detached entity passed to persist: ${getLoggableName(event.g
Error message
Detached entity passed to persist: ${getLoggableName(event.getEntityName(), entity)} What it means
Error "Detached entity passed to persist: ${getLoggableName(event.getEntityName(), entity)}" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java:83
throw new PersistentObjectException( "Uninitialized proxy passed to persist()" );
}
}
else {
persist( event, createCache, lazyInitializer.getImplementation() );
}
}
else {
persist( event, createCache, object );
}
}
private void persist(@Nonnull PersistEvent event, @Nonnull PersistContext createCache, @Nonnull Object entity) {
final var source = event.getSession();
final var entityEntry = source.getPersistenceContextInternal().getEntry( entity );
final String entityName = entityName( event, entity, entityEntry );
switch ( getEntityState( entity, entityName, entityEntry, source, true ) ) {
case DETACHED:
throw new PersistentObjectException( "Detached entity passed to persist: "
+ getLoggableName( event.getEntityName(), entity) );
case PERSISTENT:
entityIsPersistent( event, createCache );
break;
case TRANSIENT:
entityIsTransient( event, createCache );
break;
case DELETED:
entityEntry.setStatus( Status.MANAGED );
entityEntry.setDeletedState( null );
source.getActionQueue().unScheduleDeletion( entityEntry, event.getObject() );
entityIsDeleted( event, createCache );
break;
default:
throw new ObjectDeletedException( "Deleted entity passed to persist", null,
getLoggableName( entityName, entity ) );
}
}View on GitHub (pinned to fad1729dce)
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.
When it happens
Trigger: Thrown when persist() is called with an entity that already has a persistent identity (detached instance).
Common situations: 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.
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/a6b45a3edcecbc4e.
Report an issue: GitHub.