hibernate/hibernate-orm · error · IllegalStateException

Trying to lock versioned entity %s but found null version

Error message

Trying to lock versioned entity %s but found null version

What it means

Error "Trying to lock versioned entity %s but found null version" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java:104

			try {
				final EntityEntry entryToLock = entry;
				cacheLock = writingToCache( persister, cache -> {
					final Object cacheKey =
							cache.generateCacheKey( entryToLock.getId(), persister,
									session.getFactory(), session.getTenantIdentifier() );
					final var lock = cache.lockItem( session, cacheKey, entryToLock.getVersion() );
					return new CacheLock( cache, cacheKey, lock );
				}, null );

				if ( persister.isVersioned() && entry.getVersion() == null ) {
					// This should be an empty entry created for an uninitialized bytecode proxy
					if ( !Hibernate.isPropertyInitialized( object, persister.getVersionMapping().getPartName() ) ) {
						Hibernate.initialize( object );
						entry = session.getPersistenceContextInternal().getEntry( object );
						assert entry.getVersion() != null;
					}
					else {
						throw new IllegalStateException( String.format(
								"Trying to lock versioned entity %s but found null version",
								infoString( persister, entry.getId() )
						) );
					}
				}

				if ( persister.isVersioned() && requestedLockMode == LockMode.PESSIMISTIC_FORCE_INCREMENT  ) {
					// todo : should we check the current isolation mode explicitly?
					OptimisticLockHelper.forceVersionIncrement( object, entry, session );
				}
				else if ( entry.isExistsInDatabase() ) {
					final var eventMonitor = session.getEventMonitor();
					final var entityLockEvent = eventMonitor.beginEntityLockEvent();
					boolean success = false;
					try {
						persister.lock( entry.getId(), entry.getVersion(), object, lockOptions, session );
						success = true;
					}

View on GitHub (pinned to fad1729dce)

Solutions

  1. Ensure versioned entities have a non-null version (initialized by the DB or assigned); new entities should be persisted before locking.

When it happens

Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java:104 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/48878ab763821a93. Report an issue: GitHub.