HHH-17380 Persisting an entity with a non generated id and @MapsId throws PropertyValueException

This commit is contained in:
Andrea Boriero 2023-11-06 09:21:09 +01:00 committed by Christian Beikov
parent a4762886fd
commit ed107f8436
1 changed files with 11 additions and 7 deletions

View File

@ -105,6 +105,7 @@ import org.hibernate.generator.internal.VersionGeneration;
import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.id.Assigned;
import org.hibernate.id.BulkInsertionCapableIdentifierGenerator;
import org.hibernate.id.ForeignGenerator;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.OptimizableGenerator;
import org.hibernate.id.PostInsertIdentityPersister;
@ -3924,13 +3925,16 @@ public abstract class AbstractEntityPersister
return false;
}
}
final Boolean unsaved = identifierMapping.getUnsavedStrategy().isUnsaved( id );
if ( unsaved != null && !unsaved ) {
throw new PropertyValueException(
"Detached entity with generated id '" + id + "' has an uninitialized version value '" + version + "'",
getEntityName(),
getVersionColumnName()
);
final Generator identifierGenerator = getGenerator();
if ( identifierGenerator != null && !( identifierGenerator instanceof ForeignGenerator ) ) {
final Boolean unsaved = identifierMapping.getUnsavedStrategy().isUnsaved( id );
if ( unsaved != null && !unsaved ) {
throw new PropertyValueException(
"Detached entity with generated id '" + id + "' has an uninitialized version value '" + version + "'",
getEntityName(),
getVersionColumnName()
);
}
}
}
return isUnsaved;