{"record":{"id":"48878ab763821a93","repo":"hibernate/hibernate-orm","slug":"trying-to-lock-versioned-entity-s-but-found-null","errorCode":null,"errorMessage":"Trying to lock versioned entity %s but found null version","messagePattern":"Trying to lock versioned entity (.+?) but found null version","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java","lineNumber":104,"sourceCode":"\t\t\ttry {\n\t\t\t\tfinal EntityEntry entryToLock = entry;\n\t\t\t\tcacheLock = writingToCache( persister, cache -> {\n\t\t\t\t\tfinal Object cacheKey =\n\t\t\t\t\t\t\tcache.generateCacheKey( entryToLock.getId(), persister,\n\t\t\t\t\t\t\t\t\tsession.getFactory(), session.getTenantIdentifier() );\n\t\t\t\t\tfinal var lock = cache.lockItem( session, cacheKey, entryToLock.getVersion() );\n\t\t\t\t\treturn new CacheLock( cache, cacheKey, lock );\n\t\t\t\t}, null );\n\n\t\t\t\tif ( persister.isVersioned() && entry.getVersion() == null ) {\n\t\t\t\t\t// This should be an empty entry created for an uninitialized bytecode proxy\n\t\t\t\t\tif ( !Hibernate.isPropertyInitialized( object, persister.getVersionMapping().getPartName() ) ) {\n\t\t\t\t\t\tHibernate.initialize( object );\n\t\t\t\t\t\tentry = session.getPersistenceContextInternal().getEntry( object );\n\t\t\t\t\t\tassert entry.getVersion() != null;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new IllegalStateException( String.format(\n\t\t\t\t\t\t\t\t\"Trying to lock versioned entity %s but found null version\",\n\t\t\t\t\t\t\t\tinfoString( persister, entry.getId() )\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( persister.isVersioned() && requestedLockMode == LockMode.PESSIMISTIC_FORCE_INCREMENT  ) {\n\t\t\t\t\t// todo : should we check the current isolation mode explicitly?\n\t\t\t\t\tOptimisticLockHelper.forceVersionIncrement( object, entry, session );\n\t\t\t\t}\n\t\t\t\telse if ( entry.isExistsInDatabase() ) {\n\t\t\t\t\tfinal var eventMonitor = session.getEventMonitor();\n\t\t\t\t\tfinal var entityLockEvent = eventMonitor.beginEntityLockEvent();\n\t\t\t\t\tboolean success = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpersister.lock( entry.getId(), entry.getVersion(), object, lockOptions, session );\n\t\t\t\t\t\tsuccess = true;\n\t\t\t\t\t}","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java#L86-L122","documentation":"Error \"Trying to lock versioned entity %s but found null version\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown at hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java:104 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure versioned entities have a non-null version (initialized by the DB or assigned); new entities should be persisted before locking."],"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"}