Skip to content

Commit 4d9e308

Browse files
committed
HHH-19349 actually deprecate the ImmutableEntityUpdateQueryHandlingMode enum
It's just a boolean switch, and it has a ridiculously-long name. Imagine if we invented an enum like this for every single config switch in Hibernate!
1 parent eb02f85 commit 4d9e308

File tree

7 files changed

+41
-14
lines changed

7 files changed

+41
-14
lines changed

hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,11 @@ public ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandl
11361136
return immutableEntityUpdateQueryHandlingMode;
11371137
}
11381138

1139+
@Override
1140+
public boolean disallowImmutableEntityUpdate() {
1141+
return immutableEntityUpdateQueryHandlingMode == ImmutableEntityUpdateQueryHandlingMode.EXCEPTION;
1142+
}
1143+
11391144
@Override
11401145
public String getDefaultCatalog() {
11411146
return defaultCatalog;

hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,11 @@ public ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandl
413413
return delegate.getImmutableEntityUpdateQueryHandlingMode();
414414
}
415415

416+
@Override
417+
public boolean disallowImmutableEntityUpdate() {
418+
return delegate.disallowImmutableEntityUpdate();
419+
}
420+
416421
@Override
417422
public String getDefaultCatalog() {
418423
return delegate.getDefaultCatalog();

hibernate-core/src/main/java/org/hibernate/query/spi/ImmutableEntityUpdateQueryHandlingMode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717
* thrown instead.
1818
* </ul>
1919
*
20+
* @deprecated This enumeration is isomorphic to {@code boolean}. It will be removed.
21+
*
2022
* @see org.hibernate.cfg.AvailableSettings#IMMUTABLE_ENTITY_UPDATE_QUERY_HANDLING_MODE
2123
*
2224
* @author Vlad Mihalcea
2325
*/
26+
@Deprecated(since = "7.0", forRemoval = true)
2427
public enum ImmutableEntityUpdateQueryHandlingMode {
2528

2629
WARNING,

hibernate-core/src/main/java/org/hibernate/query/spi/QueryEngineOptions.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,19 @@ public interface QueryEngineOptions {
8585
*/
8686
ValueHandlingMode getCriteriaValueHandlingMode();
8787

88+
/**
89+
* @see org.hibernate.cfg.QuerySettings#IMMUTABLE_ENTITY_UPDATE_QUERY_HANDLING_MODE
90+
*
91+
* @deprecated Since {@link ImmutableEntityUpdateQueryHandlingMode} is deprecated.
92+
* Use {@link #disallowImmutableEntityUpdate} instead.
93+
*/
94+
@Deprecated(since = "7.0", forRemoval = true)
95+
ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandlingMode();
96+
8897
/**
8998
* @see org.hibernate.cfg.QuerySettings#IMMUTABLE_ENTITY_UPDATE_QUERY_HANDLING_MODE
9099
*/
91-
default ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandlingMode() {
92-
return ImmutableEntityUpdateQueryHandlingMode.WARNING;
93-
}
100+
boolean disallowImmutableEntityUpdate();
94101

95102
/**
96103
* @see org.hibernate.cfg.AvailableSettings#JSON_FUNCTIONS_ENABLED

hibernate-core/src/main/java/org/hibernate/query/sqm/NodeBuilder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,5 +1499,8 @@ default SqmSortSpecification sort(
14991499

15001500
JpaCompliance getJpaCompliance();
15011501

1502+
@Deprecated(since = "7.0", forRemoval = true)
15021503
ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandlingMode();
1504+
1505+
boolean disallowImmutableEntityUpdate();
15031506
}

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmCriteriaNodeBuilder.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public class SqmCriteriaNodeBuilder implements NodeBuilder, Serializable {
190190
private final transient JpaCompliance jpaCompliance;
191191
private final transient QueryEngine queryEngine;
192192
private final transient ValueHandlingMode criteriaValueHandlingMode;
193-
private final transient ImmutableEntityUpdateQueryHandlingMode immutableEntityUpdateQueryHandlingMode;
193+
private final transient boolean disallowImmutableEntityUpdate;
194194
private final transient BindingContext bindingContext;
195195
private transient BasicType<Boolean> booleanType;
196196
private transient BasicType<Integer> integerType;
@@ -211,7 +211,7 @@ public SqmCriteriaNodeBuilder(
211211
this.name = name;
212212
this.jpaCompliance = options.getJpaCompliance();
213213
this.criteriaValueHandlingMode = options.getCriteriaValueHandlingMode();
214-
this.immutableEntityUpdateQueryHandlingMode = options.getImmutableEntityUpdateQueryHandlingMode();
214+
this.disallowImmutableEntityUpdate = options.disallowImmutableEntityUpdate();
215215
this.bindingContext = bindingContext;
216216
this.extensions = loadExtensions();
217217
}
@@ -247,7 +247,14 @@ public JpaCompliance getJpaCompliance() {
247247

248248
@Override
249249
public ImmutableEntityUpdateQueryHandlingMode getImmutableEntityUpdateQueryHandlingMode() {
250-
return immutableEntityUpdateQueryHandlingMode;
250+
return disallowImmutableEntityUpdate
251+
? ImmutableEntityUpdateQueryHandlingMode.EXCEPTION
252+
: ImmutableEntityUpdateQueryHandlingMode.WARNING;
253+
}
254+
255+
@Override
256+
public boolean disallowImmutableEntityUpdate() {
257+
return disallowImmutableEntityUpdate;
251258
}
252259

253260
@Override

hibernate-core/src/main/java/org/hibernate/query/sqm/tree/update/SqmUpdateStatement.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,11 @@ private void verifyImmutableEntityUpdate(String hql) {
134134
nodeBuilder().getMappingMetamodel().getEntityDescriptor( getTarget().getEntityName() );
135135
if ( !persister.isMutable() ) {
136136
final String querySpaces = Arrays.toString( persister.getQuerySpaces() );
137-
switch ( nodeBuilder().getImmutableEntityUpdateQueryHandlingMode() ) {
138-
case WARNING:
139-
LOG.immutableEntityUpdateQuery( hql, querySpaces );
140-
break;
141-
case EXCEPTION:
142-
throw new HibernateException( "The query attempts to update an immutable entity: " + querySpaces );
143-
default:
144-
throw new AssertionFailure( "Unrecognized mode" );
137+
if ( nodeBuilder().disallowImmutableEntityUpdate() ) {
138+
throw new HibernateException( "The query attempts to update an immutable entity: " + querySpaces );
139+
}
140+
else {
141+
LOG.immutableEntityUpdateQuery( hql, querySpaces );
145142
}
146143
}
147144
}

0 commit comments

Comments
 (0)