Skip to content

Commit afca931

Browse files
committed
minor code cleanups in AbstractEntityPersister
Signed-off-by: Gavin King <gavin@hibernate.org>
1 parent 4a447ac commit afca931

File tree

2 files changed

+66
-62
lines changed

2 files changed

+66
-62
lines changed

hibernate-core/src/main/java/org/hibernate/internal/util/MarkerObject.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import java.io.Serializable;
1010

1111
/**
12+
* @deprecated This is a legacy of very ancient versions of Hibernate.
13+
*
1214
* @author Gavin King
1315
*/
16+
@Deprecated
1417
public class MarkerObject implements Serializable {
15-
private String name;
18+
private final String name;
1619

1720
public MarkerObject(String name) {
1821
this.name = name;

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

Lines changed: 62 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@
117117
import org.hibernate.internal.FilterHelper;
118118
import org.hibernate.internal.util.IndexedConsumer;
119119
import org.hibernate.internal.util.LazyValue;
120+
import org.hibernate.internal.util.MarkerObject;
120121
import org.hibernate.internal.util.StringHelper;
121122
import org.hibernate.internal.util.collections.ArrayHelper;
122-
import org.hibernate.internal.util.collections.CollectionHelper;
123123
import org.hibernate.internal.util.collections.LockModeEnumMap;
124124
import org.hibernate.jdbc.Expectation;
125125
import org.hibernate.jdbc.TooManyRowsAffectedException;
@@ -158,7 +158,6 @@
158158
import org.hibernate.metamodel.mapping.AttributeMapping;
159159
import org.hibernate.metamodel.mapping.AttributeMappingsList;
160160
import org.hibernate.metamodel.mapping.AttributeMappingsMap;
161-
import org.hibernate.metamodel.mapping.AttributeMetadata;
162161
import org.hibernate.metamodel.mapping.DiscriminatorConverter;
163162
import org.hibernate.metamodel.mapping.DiscriminatorType;
164163
import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart;
@@ -253,7 +252,6 @@
253252
import org.hibernate.sql.ast.tree.predicate.ComparisonPredicate;
254253
import org.hibernate.sql.ast.tree.predicate.InListPredicate;
255254
import org.hibernate.sql.ast.tree.predicate.Junction;
256-
import org.hibernate.sql.ast.tree.predicate.NegatedPredicate;
257255
import org.hibernate.sql.ast.tree.predicate.NullnessPredicate;
258256
import org.hibernate.sql.ast.tree.predicate.Predicate;
259257
import org.hibernate.sql.ast.tree.select.QuerySpec;
@@ -313,6 +311,7 @@
313311
import static org.hibernate.internal.util.collections.CollectionHelper.combine;
314312
import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty;
315313
import static org.hibernate.internal.util.collections.CollectionHelper.setOfSize;
314+
import static org.hibernate.internal.util.collections.CollectionHelper.toSmallList;
316315
import static org.hibernate.loader.ast.internal.MultiKeyLoadHelper.supportsSqlArrayType;
317316
import static org.hibernate.metamodel.RepresentationMode.POJO;
318317
import static org.hibernate.persister.entity.DiscriminatorHelper.NOT_NULL_DISCRIMINATOR;
@@ -905,27 +904,25 @@ else if ( entityMetamodel.isMutable() ) {
905904
}
906905
}
907906

907+
private static CacheLayout queryCacheLayout(CacheLayout entityQueryCacheLayout, SessionFactoryOptions options) {
908+
return entityQueryCacheLayout == null ? options.getQueryCacheLayout() : entityQueryCacheLayout;
909+
}
910+
908911
private boolean shouldUseShallowCacheLayout(CacheLayout entityQueryCacheLayout, SessionFactoryOptions options) {
909-
final CacheLayout queryCacheLayout;
910-
if ( entityQueryCacheLayout == null ) {
911-
queryCacheLayout = options.getQueryCacheLayout();
912-
}
913-
else {
914-
queryCacheLayout = entityQueryCacheLayout;
912+
switch ( queryCacheLayout( entityQueryCacheLayout, options ) ) {
913+
case FULL:
914+
return false;
915+
case AUTO:
916+
return canUseReferenceCacheEntries()
917+
|| canReadFromCache();
918+
default:
919+
return true;
915920
}
916-
return queryCacheLayout == CacheLayout.SHALLOW || queryCacheLayout == CacheLayout.SHALLOW_WITH_DISCRIMINATOR
917-
|| queryCacheLayout == CacheLayout.AUTO && ( canUseReferenceCacheEntries() || canReadFromCache() );
918921
}
919922

920-
private boolean shouldStoreDiscriminatorInShallowQueryCacheLayout(CacheLayout entityQueryCacheLayout, SessionFactoryOptions options) {
921-
final CacheLayout queryCacheLayout;
922-
if ( entityQueryCacheLayout == null ) {
923-
queryCacheLayout = options.getQueryCacheLayout();
924-
}
925-
else {
926-
queryCacheLayout = entityQueryCacheLayout;
927-
}
928-
return queryCacheLayout == CacheLayout.SHALLOW_WITH_DISCRIMINATOR;
923+
private static boolean shouldStoreDiscriminatorInShallowQueryCacheLayout(
924+
CacheLayout entityQueryCacheLayout, SessionFactoryOptions options) {
925+
return queryCacheLayout( entityQueryCacheLayout, options ) == CacheLayout.SHALLOW_WITH_DISCRIMINATOR;
929926
}
930927

931928
protected abstract String[] getSubclassTableNames();
@@ -1170,10 +1167,10 @@ public boolean hasFilterForLoadByKey() {
11701167

11711168
@Override
11721169
public Iterable<UniqueKeyEntry> uniqueKeyEntries() {
1173-
if ( this.uniqueKeyEntries == null ) {
1174-
this.uniqueKeyEntries = initUniqueKeyEntries( this );
1170+
if ( uniqueKeyEntries == null ) {
1171+
uniqueKeyEntries = initUniqueKeyEntries( this );
11751172
}
1176-
return this.uniqueKeyEntries;
1173+
return uniqueKeyEntries;
11771174
}
11781175

11791176
private static List<UniqueKeyEntry> initUniqueKeyEntries(final AbstractEntityPersister aep) {
@@ -1192,7 +1189,7 @@ private static List<UniqueKeyEntry> initUniqueKeyEntries(final AbstractEntityPer
11921189
}
11931190
}
11941191
}
1195-
return CollectionHelper.toSmallList( uniqueKeys );
1192+
return toSmallList( uniqueKeys );
11961193
}
11971194

11981195
protected Map<String, SingleIdArrayLoadPlan> getLazyLoadPlanByFetchGroup() {
@@ -1230,7 +1227,7 @@ private SingleIdArrayLoadPlan createLazyLoadPlan(List<LazyAttributeDescriptor> f
12301227
return null;
12311228
}
12321229
else {
1233-
JdbcParametersList.Builder jdbcParametersBuilder = JdbcParametersList.newBuilder();
1230+
final JdbcParametersList.Builder jdbcParametersBuilder = JdbcParametersList.newBuilder();
12341231
final SelectStatement select = LoaderSelectBuilder.createSelect(
12351232
this,
12361233
partsToSelect,
@@ -1242,12 +1239,11 @@ private SingleIdArrayLoadPlan createLazyLoadPlan(List<LazyAttributeDescriptor> f
12421239
jdbcParametersBuilder::add,
12431240
factory
12441241
);
1245-
JdbcParametersList jdbcParameters = jdbcParametersBuilder.build();
12461242
return new SingleIdArrayLoadPlan(
12471243
this,
12481244
getIdentifierMapping(),
12491245
select,
1250-
jdbcParameters,
1246+
jdbcParametersBuilder.build(),
12511247
LockOptions.NONE,
12521248
factory
12531249
);
@@ -2921,17 +2917,16 @@ private Predicate createDisciminatorPredicate(BasicType<?> discriminatorType, Ex
29212917
return new NullnessPredicate( sqlExpression );
29222918
}
29232919
else if ( value == NOT_NULL_DISCRIMINATOR ) {
2924-
return new NegatedPredicate( new NullnessPredicate( sqlExpression ) );
2920+
return new NullnessPredicate( sqlExpression, true );
29252921
}
29262922
else {
2927-
final QueryLiteral<Object> literal = new QueryLiteral<>( value, discriminatorType );
2928-
return new ComparisonPredicate( sqlExpression, ComparisonOperator.EQUAL, literal );
2923+
return new ComparisonPredicate( sqlExpression, ComparisonOperator.EQUAL,
2924+
new QueryLiteral<>( value, discriminatorType ) );
29292925
}
29302926
}
29312927
}
29322928

29332929
private Predicate createInListPredicate(BasicType<?> discriminatorType, Expression sqlExpression) {
2934-
final List<Expression> values = new ArrayList<>( fullDiscriminatorValues.length );
29352930
boolean hasNull = false, hasNonNull = false;
29362931
for ( Object discriminatorValue : fullDiscriminatorValues ) {
29372932
if ( discriminatorValue == NULL_DISCRIMINATOR ) {
@@ -2940,43 +2935,48 @@ private Predicate createInListPredicate(BasicType<?> discriminatorType, Expressi
29402935
else if ( discriminatorValue == NOT_NULL_DISCRIMINATOR ) {
29412936
hasNonNull = true;
29422937
}
2943-
else {
2944-
values.add( new QueryLiteral<>( discriminatorValue, discriminatorType) );
2945-
}
29462938
}
2947-
final Predicate predicate = new InListPredicate( sqlExpression, values );
2948-
if ( hasNull || hasNonNull ) {
2939+
if ( hasNull && hasNonNull ) {
2940+
// This means we need to select all rows,
2941+
// and so we don't need a predicate at all
2942+
// Just return an empty Junction
2943+
return new Junction( Junction.Nature.DISJUNCTION );
2944+
}
2945+
else if ( hasNonNull ) {
2946+
// we need every row with a non-null discriminator
2947+
return new NullnessPredicate( sqlExpression, true );
2948+
}
2949+
else if ( hasNull ) {
29492950
final Junction junction = new Junction( Junction.Nature.DISJUNCTION );
2951+
junction.add( new NullnessPredicate( sqlExpression ) );
2952+
junction.add( discriminatorValuesPredicate( discriminatorType, sqlExpression ) );
2953+
return junction;
2954+
}
2955+
else {
2956+
return discriminatorValuesPredicate( discriminatorType, sqlExpression );
2957+
}
2958+
}
29502959

2951-
if ( hasNull && hasNonNull ) {
2952-
// This means we need to select everything, we don't need a predicate at all
2953-
// Return an empty Junction
2954-
return junction;
2955-
}
2956-
2957-
if ( hasNonNull ) {
2958-
return new NullnessPredicate( sqlExpression, true );
2959-
}
2960-
else if ( hasNull ) {
2961-
junction.add( new NullnessPredicate( sqlExpression ) );
2960+
private InListPredicate discriminatorValuesPredicate(BasicType<?> discriminatorType, Expression sqlExpression) {
2961+
final List<Expression> values = new ArrayList<>( fullDiscriminatorValues.length );
2962+
for ( Object discriminatorValue : fullDiscriminatorValues ) {
2963+
if ( !(discriminatorValue instanceof MarkerObject) ) {
2964+
values.add( new QueryLiteral<>( discriminatorValue, discriminatorType) );
29622965
}
2963-
2964-
junction.add( predicate );
2965-
return junction;
29662966
}
2967-
return predicate;
2967+
return new InListPredicate( sqlExpression, values);
29682968
}
29692969

29702970
protected String getPrunedDiscriminatorPredicate(
29712971
Map<String, EntityNameUse> entityNameUses,
29722972
MappingMetamodelImplementor mappingMetamodel,
29732973
String alias) {
2974-
final InFragment frag = new InFragment();
2974+
final InFragment fragment = new InFragment();
29752975
if ( isDiscriminatorFormula() ) {
2976-
frag.setFormula( alias, getDiscriminatorFormulaTemplate() );
2976+
fragment.setFormula( alias, getDiscriminatorFormulaTemplate() );
29772977
}
29782978
else {
2979-
frag.setColumn( alias, getDiscriminatorColumnName() );
2979+
fragment.setColumn( alias, getDiscriminatorColumnName() );
29802980
}
29812981
boolean containsNotNull = false;
29822982
for ( Map.Entry<String, EntityNameUse> entry : entityNameUses.entrySet() ) {
@@ -2991,11 +2991,12 @@ protected String getPrunedDiscriminatorPredicate(
29912991
// as the query will contain a filter for that already anyway
29922992
if ( !persister.isAbstract() && ( this == persister || !isTypeOrSuperType( persister ) ) ) {
29932993
containsNotNull = containsNotNull || InFragment.NOT_NULL.equals( persister.getDiscriminatorSQLValue() );
2994-
frag.addValue( persister.getDiscriminatorSQLValue() );
2994+
fragment.addValue( persister.getDiscriminatorSQLValue() );
29952995
}
29962996
}
2997-
final List<String> discriminatorSQLValues = Arrays.asList( ( (AbstractEntityPersister) getRootEntityDescriptor() ).fullDiscriminatorSQLValues );
2998-
if ( frag.getValues().size() == discriminatorSQLValues.size() ) {
2997+
final AbstractEntityPersister rootEntityDescriptor = (AbstractEntityPersister) getRootEntityDescriptor();
2998+
final List<String> discriminatorSQLValues = Arrays.asList( rootEntityDescriptor.fullDiscriminatorSQLValues );
2999+
if ( fragment.getValues().size() == discriminatorSQLValues.size() ) {
29993000
// Nothing to prune if we filter for all subtypes
30003001
return null;
30013002
}
@@ -3010,7 +3011,7 @@ protected String getPrunedDiscriminatorPredicate(
30103011
}
30113012
final List<String> actualDiscriminatorSQLValues = new ArrayList<>( discriminatorSQLValues.size() );
30123013
for ( String value : discriminatorSQLValues ) {
3013-
if ( !frag.getValues().contains( value ) && !InFragment.NULL.equals( value ) ) {
3014+
if ( !fragment.getValues().contains( value ) && !InFragment.NULL.equals( value ) ) {
30143015
actualDiscriminatorSQLValues.add( value );
30153016
}
30163017
}
@@ -3021,11 +3022,11 @@ protected String getPrunedDiscriminatorPredicate(
30213022
sb.append( ") and " );
30223023
}
30233024
sb.append( lhs ).append( " is not null" );
3024-
frag.getValues().remove( InFragment.NOT_NULL );
3025-
return frag.toFragmentString() + sb;
3025+
fragment.getValues().remove( InFragment.NOT_NULL );
3026+
return fragment.toFragmentString() + sb;
30263027
}
30273028
else {
3028-
return frag.toFragmentString();
3029+
return fragment.toFragmentString();
30293030
}
30303031
}
30313032

0 commit comments

Comments
 (0)