hibernate/hibernate-orm · error · HibernateException

No collection for replacement found: {role}

Error message

No collection for replacement found: {role}

What it means

Error "No collection for replacement found: {role}" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java:1060

			throw new HibernateException( "Replacement of not directly accessible collection found: "
											+ oldCollection.getRole() );
		}
		assert !collection.isDirectlyAccessible();
		final var oldEntry = collectionEntries.remove( oldCollection.$$_hibernate_getInstanceId(), oldCollection );
		final var entry =
				oldEntry.getLoadedPersister() != null
						// This is an already existing/loaded collection so ensure the loadedPersister is initialized
						? new CollectionEntry( collection, session.getFactory() )
						// A newly wrapped collection
						: new CollectionEntry( persister, collection );
		entry.setReadOnly( oldEntry.isReadOnly(), collection );
		putCollectionEntry( collection, entry );
		final Object key = collection.getKey();
		if ( key != null ) {
			final var collectionKey = session.generateCollectionKey( entry.getLoadedPersister(), key );
			final var old = addCollectionByKey( collectionKey, collection );
			if ( old == null ) {
				throw new HibernateException( "No collection for replacement found: " + collectionKey.getRole() );
			}
		}
	}

	/**
	 * Add a collection to the cache, with a given collection entry.
	 *
	 * @param coll The collection for which we are adding an entry.
	 * @param entry The entry representing the collection.
	 * @param key The key of the collection's entry.
	 */
	private void addCollection(PersistentCollection<?> coll, CollectionEntry entry, Object key) {
		putCollectionEntry( coll, entry );
		final var collectionKey = session.generateCollectionKey( entry.getLoadedPersister(), key );
		final var old = addCollectionByKey( collectionKey, coll );
		if ( old != null ) {
			if ( old == coll ) {
				throw new AssertionFailure( "bug adding collection twice" );

View on GitHub (pinned to fad1729dce)

Solutions

  1. Ensure the collection with the given role is loaded in the persistence context before attempting replacement
  2. Verify the role name matches a mapped collection

When it happens

Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java:1060 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/8e256cef1b8075d1. Report an issue: GitHub.