diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java index f5b3c321e9..a1beeda41e 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java @@ -195,6 +195,7 @@ public abstract class AbstractCollectionPersister private final boolean isLazy; private final boolean isExtraLazy; protected final boolean isInverse; + private final boolean keyIsUpdateable; private final boolean isMutable; private final boolean isVersioned; protected final int batchSize; @@ -492,6 +493,8 @@ else if ( indexedCollection instanceof org.hibernate.mapping.Map isInverse = collectionBootDescriptor.isInverse(); + keyIsUpdateable = collectionBootDescriptor.getKey().isUpdateable(); + if ( collectionBootDescriptor.isArray() ) { elementClass = ( (org.hibernate.mapping.Array) collectionBootDescriptor ).getElementClass(); } @@ -1098,7 +1101,7 @@ public void remove(Object id, SharedSessionContractImplementor session) throws H } protected boolean isRowDeleteEnabled() { - return true; + return keyIsUpdateable; } @Override @@ -1107,7 +1110,7 @@ public boolean needsRemove() { } protected boolean isRowInsertEnabled() { - return true; + return keyIsUpdateable; } public String getOwnerEntityName() { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java index 1caf208f6b..4bd02709dd 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java @@ -102,7 +102,6 @@ public class OneToManyPersister extends AbstractCollectionPersister { private final boolean cascadeDeleteEnabled; private final boolean keyIsNullable; - private final boolean keyIsUpdateable; private final MutationExecutorService mutationExecutorService; @Deprecated(since = "6.0") @@ -121,7 +120,6 @@ public OneToManyPersister( cascadeDeleteEnabled = collectionBinding.getKey().isCascadeDeleteEnabled() && creationContext.getDialect().supportsCascadeDelete(); keyIsNullable = collectionBinding.getKey().isNullable(); - keyIsUpdateable = collectionBinding.getKey().isUpdateable(); this.rowMutationOperations = buildRowMutationOperations(); @@ -156,12 +154,7 @@ protected RemoveCoordinator getRemoveCoordinator() { @Override protected boolean isRowDeleteEnabled() { - return keyIsUpdateable && keyIsNullable; - } - - @Override - protected boolean isRowInsertEnabled() { - return keyIsUpdateable; + return super.isRowDeleteEnabled() && keyIsNullable; } public boolean isCascadeDeleteEnabled() {