diff --git a/documentation/src/main/asciidoc/introduction/Interacting.adoc b/documentation/src/main/asciidoc/introduction/Interacting.adoc index f1f39d48ceab..c84e69e0ce2b 100644 --- a/documentation/src/main/asciidoc/introduction/Interacting.adoc +++ b/documentation/src/main/asciidoc/introduction/Interacting.adoc @@ -37,7 +37,7 @@ Stateful sessions certainly have their advantages, but they're more difficult to ==== [[persistence-contexts]] -=== Persistence Contexts +=== Persistence contexts A persistence context is a sort of cache; we sometimes call it the "first-level cache", to distinguish it from the <>. For every entity instance read from the database within the scope of a persistence context, and for every new entity made persistent within the scope of the persistence context, the context holds a unique mapping from the identifier of the entity instance to the instance itself. diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java index e722df4dc8f1..431a9e3c46ed 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java @@ -542,14 +542,13 @@ public Class> findRegisteredUserType(Class basicType) { @Override public void addCollectionTypeRegistration(CollectionTypeRegistration registrationAnnotation) { - addCollectionTypeRegistration( - registrationAnnotation.classification(), - toDescriptor( registrationAnnotation ) - ); + addCollectionTypeRegistration( registrationAnnotation.classification(), + toDescriptor( registrationAnnotation ) ); } @Override - public void addCollectionTypeRegistration(CollectionClassification classification, CollectionTypeRegistrationDescriptor descriptor) { + public void addCollectionTypeRegistration( + CollectionClassification classification, CollectionTypeRegistrationDescriptor descriptor) { if ( collectionTypeRegistrations == null ) { collectionTypeRegistrations = new HashMap<>(); } @@ -558,18 +557,13 @@ public void addCollectionTypeRegistration(CollectionClassification classificatio @Override public CollectionTypeRegistrationDescriptor findCollectionTypeRegistration(CollectionClassification classification) { - if ( collectionTypeRegistrations == null ) { - return null; - } + return collectionTypeRegistrations == null ? null : collectionTypeRegistrations.get( classification ); - return collectionTypeRegistrations.get( classification ); } private CollectionTypeRegistrationDescriptor toDescriptor(CollectionTypeRegistration registrationAnnotation) { - return new CollectionTypeRegistrationDescriptor( - registrationAnnotation.type(), - extractParameters( registrationAnnotation.parameters() ) - ); + return new CollectionTypeRegistrationDescriptor( registrationAnnotation.type(), + extractParameters( registrationAnnotation.parameters() ) ); } private Map extractParameters(Parameter[] annotationUsages) { @@ -675,7 +669,7 @@ public void addFetchProfile(FetchProfile profile) { if ( profile == null || profile.getName() == null ) { throw new IllegalArgumentException( "Fetch profile object or name is null: " + profile ); } - FetchProfile old = fetchProfileMap.put( profile.getName(), profile ); + final FetchProfile old = fetchProfileMap.put( profile.getName(), profile ); if ( old != null ) { log.warn( "Duplicated fetch profile with same name [" + profile.getName() + "] found." ); } @@ -966,16 +960,11 @@ public Table addTable( // annotation binding depends on the "table name" for @Subselect bindings // being set into the generated table (mainly to avoid later NPE), but for now we need to keep that :( - final Identifier logicalName; - if ( name != null ) { - logicalName = getDatabase().toIdentifier( name ); - } - else { - logicalName = null; - } + final Identifier logicalName = name != null ? getDatabase().toIdentifier( name ) : null; if ( subselectFragment != null ) { - return new Table( buildingContext.getCurrentContributorName(), namespace, logicalName, subselectFragment, isAbstract ); + return new Table( buildingContext.getCurrentContributorName(), + namespace, logicalName, subselectFragment, isAbstract ); } else { final Table existing = namespace.locateTable( logicalName ); @@ -988,7 +977,9 @@ public Table addTable( return namespace.createTable( logicalName, - (physicalName) -> new Table( buildingContext.getCurrentContributorName(), namespace, physicalName, isAbstract ) + (physicalName) -> + new Table( buildingContext.getCurrentContributorName(), + namespace, physicalName, isAbstract ) ); } } @@ -1216,7 +1207,16 @@ public void addColumnNameBinding(Table table, Identifier logicalName, Column col @Override public String getPhysicalColumnName(Table table, String logicalName) throws MappingException { - return getPhysicalColumnName( table, getDatabase().toIdentifier( logicalName ) ); + final Identifier identifier = getDatabase().toIdentifier( logicalName ); + if ( identifier == null ) { + throw new MappingException( String.format( + Locale.ENGLISH, + "Column with logical name '%s' in table '%s' cannot be mapped to column identifier", + logicalName, + table.getName() + ) ); + } + return getPhysicalColumnName( table, identifier ); } @Override @@ -1370,14 +1370,8 @@ public void addPropertyAnnotatedWithMapsId(ClassDetails entityType, PropertyData propertiesAnnotatedWithMapsId = new HashMap<>(); } - final Map map = propertiesAnnotatedWithMapsId.computeIfAbsent( - entityType, - k -> new HashMap<>() - ); - map.put( - property.getAttributeMember().getDirectAnnotationUsage( MapsId.class ).value(), - property - ); + propertiesAnnotatedWithMapsId.computeIfAbsent( entityType, k -> new HashMap<>() ) + .put( property.getAttributeMember().getDirectAnnotationUsage( MapsId.class ).value(), property ); } @Override @@ -1386,11 +1380,8 @@ public void addPropertyAnnotatedWithMapsIdSpecj(ClassDetails entityType, Propert propertiesAnnotatedWithMapsId = new HashMap<>(); } - final Map map = propertiesAnnotatedWithMapsId.computeIfAbsent( - entityType, - k -> new HashMap<>() - ); - map.put( mapsIdValue, property ); + propertiesAnnotatedWithMapsId.computeIfAbsent( entityType, k -> new HashMap<>() ) + .put( mapsIdValue, property ); } @Override @@ -1409,9 +1400,8 @@ public void addToOneAndIdProperty(ClassDetails entityType, PropertyData property propertiesAnnotatedWithIdAndToOne = new HashMap<>(); } - final Map map = - propertiesAnnotatedWithIdAndToOne.computeIfAbsent( entityType, k -> new HashMap<>() ); - map.put( property.getPropertyName(), property ); + propertiesAnnotatedWithIdAndToOne.computeIfAbsent( entityType, k -> new HashMap<>() ) + .put( property.getPropertyName(), property ); } @Override @@ -1424,10 +1414,7 @@ public void addMappedBy(String entityName, String propertyName, String inversePr @Override public String getFromMappedBy(String entityName, String propertyName) { - if ( mappedByResolver == null ) { - return null; - } - return mappedByResolver.get( entityName + "." + propertyName ); + return mappedByResolver == null ? null : mappedByResolver.get( entityName + "." + propertyName ); } @Override @@ -1440,10 +1427,7 @@ public void addPropertyReferencedAssociation(String entityName, String propertyN @Override public String getPropertyReferencedAssociation(String entityName, String propertyName) { - if ( propertyRefResolver == null ) { - return null; - } - return propertyRefResolver.get( entityName + "." + propertyName ); + return propertyRefResolver == null ? null : propertyRefResolver.get( entityName + "." + propertyName ); } private static class DelayedPropertyReferenceHandlerAnnotationImpl implements DelayedPropertyReferenceHandler { @@ -1519,7 +1503,7 @@ public EntityTableXref addEntityTableXref( @Override public Map getJoins(String entityName) { - EntityTableXrefImpl xrefEntry = entityTableXrefMap.get( entityName ); + final EntityTableXrefImpl xrefEntry = entityTableXrefMap.get( entityName ); return xrefEntry == null ? null : xrefEntry.secondaryTableJoinMap; } @@ -1532,14 +1516,16 @@ private static final class EntityTableXrefImpl implements EntityTableXref { //private Map secondaryTableJoinMap; private Map secondaryTableJoinMap; - public EntityTableXrefImpl(Identifier primaryTableLogicalName, Table primaryTable, EntityTableXrefImpl superEntityTableXref) { + public EntityTableXrefImpl( + Identifier primaryTableLogicalName, Table primaryTable, EntityTableXrefImpl superEntityTableXref) { this.primaryTableLogicalName = primaryTableLogicalName; this.primaryTable = primaryTable; this.superEntityTableXref = superEntityTableXref; } @Override - public void addSecondaryTable(LocalMetadataBuildingContext buildingContext, Identifier logicalName, Join secondaryTableJoin) { + public void addSecondaryTable( + LocalMetadataBuildingContext buildingContext, Identifier logicalName, Join secondaryTableJoin) { if ( Identifier.areEqual( primaryTableLogicalName, logicalName ) ) { throw new org.hibernate.boot.MappingException( String.format( @@ -1577,6 +1563,8 @@ public void addSecondaryTable(LocalMetadataBuildingContext buildingContext, Iden @Override public void addSecondaryTable(QualifiedTableName logicalQualifiedTableName, Join secondaryTableJoin) { + final Identifier tableName = logicalQualifiedTableName.getTableName(); + if ( Identifier.areEqual( toIdentifier( new QualifiedTableName( @@ -1586,21 +1574,21 @@ public void addSecondaryTable(QualifiedTableName logicalQualifiedTableName, Join ).render() ), toIdentifier( logicalQualifiedTableName.render() ) ) ) { - throw new DuplicateSecondaryTableException( logicalQualifiedTableName.getTableName() ); + throw new DuplicateSecondaryTableException( tableName ); } if ( secondaryTableJoinMap == null ) { //secondaryTableJoinMap = new HashMap(); //secondaryTableJoinMap.put( logicalName, secondaryTableJoin ); secondaryTableJoinMap = new HashMap<>(); - secondaryTableJoinMap.put( logicalQualifiedTableName.getTableName().getCanonicalName(), secondaryTableJoin ); + secondaryTableJoinMap.put( tableName.getCanonicalName(), secondaryTableJoin ); } else { //final Join existing = secondaryTableJoinMap.put( logicalName, secondaryTableJoin ); - final Join existing = secondaryTableJoinMap.put( logicalQualifiedTableName.getTableName().getCanonicalName(), secondaryTableJoin ); - + final Join existing = + secondaryTableJoinMap.put( tableName.getCanonicalName(), secondaryTableJoin ); if ( existing != null ) { - throw new DuplicateSecondaryTableException( logicalQualifiedTableName.getTableName() ); + throw new DuplicateSecondaryTableException( tableName ); } } } @@ -1680,41 +1668,38 @@ public void addSecondPass(SecondPass secondPass) { @Override public void addSecondPass(SecondPass secondPass, boolean onTopOfTheQueue) { - if ( secondPass instanceof IdGeneratorResolver ) { - addIdGeneratorResolverSecondPass( (IdGeneratorResolver) secondPass, onTopOfTheQueue ); + if ( secondPass instanceof IdGeneratorResolver generatorResolver ) { + addIdGeneratorResolverSecondPass( generatorResolver, onTopOfTheQueue ); } - else if ( secondPass instanceof SetBasicValueTypeSecondPass ) { - addSetBasicValueTypeSecondPass( (SetBasicValueTypeSecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof SetBasicValueTypeSecondPass setBasicValueTypeSecondPass ) { + addSetBasicValueTypeSecondPass( setBasicValueTypeSecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof AggregateComponentSecondPass ) { - addAggregateComponentSecondPass( (AggregateComponentSecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof AggregateComponentSecondPass aggregateComponentSecondPass ) { + addAggregateComponentSecondPass( aggregateComponentSecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof FkSecondPass ) { - addFkSecondPass( (FkSecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof FkSecondPass fkSecondPass ) { + addFkSecondPass( fkSecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof CreateKeySecondPass ) { - addCreateKeySecondPass( (CreateKeySecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof CreateKeySecondPass createKeySecondPass ) { + addCreateKeySecondPass( createKeySecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof ImplicitToOneJoinTableSecondPass ) { - addImplicitToOneJoinTableSecondPass( (ImplicitToOneJoinTableSecondPass) secondPass ); + else if ( secondPass instanceof ImplicitToOneJoinTableSecondPass implicitToOneJoinTableSecondPass ) { + addImplicitToOneJoinTableSecondPass( implicitToOneJoinTableSecondPass ); } - else if ( secondPass instanceof SecondaryTableSecondPass ) { - addSecondaryTableSecondPass( (SecondaryTableSecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof SecondaryTableSecondPass secondaryTableSecondPass ) { + addSecondaryTableSecondPass( secondaryTableSecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof SecondaryTableFromAnnotationSecondPass ) { - addSecondaryTableFromAnnotationSecondPass( - (SecondaryTableFromAnnotationSecondPass) secondPass, - onTopOfTheQueue - ); + else if ( secondPass instanceof SecondaryTableFromAnnotationSecondPass secondaryTableFromAnnotationSecondPass ) { + addSecondaryTableFromAnnotationSecondPass( secondaryTableFromAnnotationSecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof QuerySecondPass ) { - addQuerySecondPass( (QuerySecondPass) secondPass, onTopOfTheQueue ); + else if ( secondPass instanceof QuerySecondPass querySecondPass ) { + addQuerySecondPass( querySecondPass, onTopOfTheQueue ); } - else if ( secondPass instanceof ImplicitColumnNamingSecondPass ) { - addImplicitColumnNamingSecondPass( (ImplicitColumnNamingSecondPass) secondPass ); + else if ( secondPass instanceof ImplicitColumnNamingSecondPass implicitColumnNamingSecondPass ) { + addImplicitColumnNamingSecondPass( implicitColumnNamingSecondPass ); } - else if ( secondPass instanceof OptionalDeterminationSecondPass ) { - addOptionalDeterminationSecondPass( (OptionalDeterminationSecondPass) secondPass ); + else if ( secondPass instanceof OptionalDeterminationSecondPass optionalDeterminationSecondPass ) { + addOptionalDeterminationSecondPass( optionalDeterminationSecondPass ); } else { // add to the general SecondPass list @@ -1783,7 +1768,8 @@ private void addSecondaryTableSecondPass(SecondaryTableSecondPass secondPass, bo addSecondPass( secondPass, secondaryTableSecondPassList, onTopOfTheQueue ); } - private void addSecondaryTableFromAnnotationSecondPass(SecondaryTableFromAnnotationSecondPass secondPass, boolean onTopOfTheQueue){ + private void addSecondaryTableFromAnnotationSecondPass( + SecondaryTableFromAnnotationSecondPass secondPass, boolean onTopOfTheQueue){ if ( secondaryTableFromAnnotationSecondPassesList == null ) { secondaryTableFromAnnotationSecondPassesList = new ArrayList<>(); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractEntityIdGeneratorResolver.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractEntityIdGeneratorResolver.java index 77d11e05d5f6..d82d3b1862cf 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractEntityIdGeneratorResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractEntityIdGeneratorResolver.java @@ -73,7 +73,7 @@ public final void doSecondPass(Map persistentClasses) t } private void handleSequenceStrategy() { - if ( generatedValue.generator().isEmpty() ) { + if ( generatedValue.generator().isBlank() ) { handleUnnamedSequenceGenerator(); } else { @@ -86,7 +86,7 @@ private void handleSequenceStrategy() { protected abstract void handleNamedSequenceGenerator(); private void handleTableStrategy() { - if ( generatedValue.generator().isEmpty() ) { + if ( generatedValue.generator().isBlank() ) { handleUnnamedTableGenerator(); } else { @@ -99,7 +99,7 @@ private void handleTableStrategy() { protected abstract void handleNamedTableGenerator(); private void handleAutoStrategy() { - if ( generatedValue.generator().isEmpty() ) { + if ( generatedValue.generator().isBlank() ) { handleUnnamedAutoGenerator(); } else { @@ -148,7 +148,7 @@ private Annotation findGeneratorAnnotation(AnnotationTarget annotationTarget) { protected boolean handleAsLegacyGenerator() { // Handle a few legacy Hibernate generators... final String nameFromGeneratedValue = generatedValue.generator(); - if ( !nameFromGeneratedValue.isEmpty() ) { + if ( !nameFromGeneratedValue.isBlank() ) { final Class legacyNamedGenerator = mapLegacyNamedGenerator( nameFromGeneratedValue, idValue ); if ( legacyNamedGenerator != null ) { final Map configuration = buildLegacyGeneratorConfig(); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java index 129b47af92b3..89700dbe946e 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java @@ -4,7 +4,6 @@ */ package org.hibernate.boot.model.internal; -import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -24,7 +23,6 @@ import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.models.spi.AnnotationTarget; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.MemberDetails; @@ -36,7 +34,6 @@ import jakarta.persistence.AssociationOverride; import jakarta.persistence.AttributeOverride; -import jakarta.persistence.CheckConstraint; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; @@ -47,7 +44,10 @@ import static org.hibernate.boot.model.internal.TimeZoneStorageHelper.isOffsetTimeClass; import static org.hibernate.boot.model.internal.TimeZoneStorageHelper.useColumnForTimeZoneStorage; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.qualify; +import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; /** * @author Emmanuel Bernard @@ -153,10 +153,12 @@ public boolean isInIdClass() { if ( isInIdClass != null ) { return isInIdClass; } - if ( parent != null ) { + else if ( parent != null ) { return parent.isInIdClass(); } - return false; + else { + return false; + } } @Override @@ -441,13 +443,15 @@ private static Map buildColumnOverride( return result; } - final SourceModelBuildingContext sourceModelContext = context.getMetadataCollector().getSourceModelBuildingContext(); + final SourceModelBuildingContext sourceModelContext = + context.getMetadataCollector().getSourceModelBuildingContext(); final Map> columnOverrideMap = new HashMap<>(); - final AttributeOverride[] overrides = element.getRepeatedAnnotationUsages( AttributeOverride.class, sourceModelContext ); - if ( CollectionHelper.isNotEmpty( overrides ) ) { + final AttributeOverride[] overrides = + element.getRepeatedAnnotationUsages( AttributeOverride.class, sourceModelContext ); + if ( isNotEmpty( overrides ) ) { for ( AttributeOverride depAttr : overrides ) { - final String qualifiedName = StringHelper.qualify( path, depAttr.name() ); + final String qualifiedName = qualify( path, depAttr.name() ); final Column column = depAttr.column(); if ( columnOverrideMap.containsKey( qualifiedName ) ) { @@ -529,7 +533,7 @@ private static Column createTemporalColumn( int secondPrecision; final Column annotatedColumn = element.getDirectAnnotationUsage( Column.class ); if ( annotatedColumn != null ) { - if ( StringHelper.isNotEmpty( annotatedColumn.name() ) ) { + if ( isNotBlank( annotatedColumn.name() ) ) { return annotatedColumn; } precision = annotatedColumn.precision(); @@ -564,7 +568,8 @@ public MetadataBuildingContext getBuildingContext() { ) ); - final ColumnJpaAnnotation created = JpaAnnotations.COLUMN.createUsage( context.getMetadataCollector().getSourceModelBuildingContext() ); + final ColumnJpaAnnotation created = + JpaAnnotations.COLUMN.createUsage( context.getMetadataCollector().getSourceModelBuildingContext() ); if ( StringHelper.isNotEmpty( implicitName.getText() ) ) { created.name( implicitName.getText() ); } @@ -587,12 +592,8 @@ private static Map buildColumnTransformerOverride(Ann private static Map buildJoinColumnOverride(AnnotationTarget element, String path, MetadataBuildingContext context) { final Map columnOverride = new HashMap<>(); if ( element != null ) { - final AssociationOverride[] overrides = buildAssociationOverrides( element, path, context ); - for ( AssociationOverride override : overrides ) { - columnOverride.put( - qualify( path, override.name() ), - override.joinColumns() - ); + for ( AssociationOverride override : buildAssociationOverrides( element, path, context ) ) { + columnOverride.put( qualify( path, override.name() ), override.joinColumns() ); } } return columnOverride; @@ -601,12 +602,8 @@ private static Map buildJoinColumnOverride(AnnotationTarge private static Map buildForeignKeyOverride(AnnotationTarget element, String path, MetadataBuildingContext context) { final Map foreignKeyOverride = new HashMap<>(); if ( element != null ) { - final AssociationOverride[] overrides = buildAssociationOverrides( element, path, context ); - for ( AssociationOverride override : overrides ) { - foreignKeyOverride.put( - qualify( path, override.name() ), - override.foreignKey() - ); + for ( AssociationOverride override : buildAssociationOverrides( element, path, context ) ) { + foreignKeyOverride.put( qualify( path, override.name() ), override.foreignKey() ); } } return foreignKeyOverride; @@ -619,14 +616,9 @@ private static AssociationOverride[] buildAssociationOverrides(AnnotationTarget private static Map buildJoinTableOverride(AnnotationTarget element, String path, MetadataBuildingContext context) { final Map result = new HashMap<>(); if ( element != null ) { - final AssociationOverride[] overrides = buildAssociationOverrides( element, path, context ); - for ( AssociationOverride override : overrides ) { - final JoinColumn[] joinColumns = override.joinColumns(); - if ( CollectionHelper.isEmpty( joinColumns ) ) { - result.put( - qualify( path, override.name() ), - override.joinTable() - ); + for ( AssociationOverride override : buildAssociationOverrides( element, path, context ) ) { + if ( isEmpty( override.joinColumns() ) ) { + result.put( qualify( path, override.name() ), override.joinTable() ); } } } @@ -637,113 +629,4 @@ private static Map buildJoinTableOverride(AnnotationTarget el public void setParentProperty(String parentProperty) { throw new AssertionFailure( "Setting the parent property to a non component" ); } - - private static class ColumnImpl implements Column { - - private final String name; - private final boolean unique; - private final boolean nullable; - private final boolean insertable; - private final boolean updatable; - private final String columnDefinition; - private final String table; - private final int precision; - private final int secondPrecision; - - private ColumnImpl( - String name, - boolean unique, - boolean nullable, - boolean insertable, - boolean updatable, - String columnDefinition, - String table, - int precision, - int secondPrecision) { - this.name = name; - this.unique = unique; - this.nullable = nullable; - this.insertable = insertable; - this.updatable = updatable; - this.columnDefinition = columnDefinition; - this.table = table; - this.precision = precision; - this.secondPrecision = secondPrecision; - } - - @Override - public String name() { - return name; - } - - @Override - public boolean unique() { - return unique; - } - - @Override - public boolean nullable() { - return nullable; - } - - @Override - public boolean insertable() { - return insertable; - } - - @Override - public boolean updatable() { - return updatable; - } - - @Override - public String columnDefinition() { - return columnDefinition; - } - - @Override - public String options() { - return ""; - } - - @Override - public String table() { - return table; - } - - @Override - public int length() { - return 255; - } - - @Override - public int precision() { - return precision; - } - - @Override - public int scale() { - return 0; - } - - @Override - public int secondPrecision() { - return secondPrecision; - } - - @Override - public CheckConstraint[] check() { - return new CheckConstraint[0]; - } - - @Override - public String comment() { - return ""; - } - - @Override - public Class annotationType() { - return Column.class; - } - } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java index 44a9aafe880e..a04bef3fcf5b 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java @@ -28,8 +28,6 @@ import org.hibernate.boot.spi.PropertyData; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.ArrayHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.mapping.AggregateColumn; import org.hibernate.mapping.CheckConstraint; import org.hibernate.mapping.Column; @@ -46,9 +44,13 @@ import static org.hibernate.boot.model.internal.BinderHelper.getPath; import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath; import static org.hibernate.boot.model.internal.DialectOverridesAnnotationHelper.getOverridableAnnotation; +import static org.hibernate.internal.util.StringHelper.isBlank; import static org.hibernate.internal.util.StringHelper.isEmpty; import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.nullIfBlank; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; +import static org.hibernate.internal.util.collections.ArrayHelper.isEmpty; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; /** * A mapping to a column, logically representing a @@ -664,7 +666,7 @@ public static AnnotatedColumns buildColumnsOrFormulaFromAnnotation( } else { final jakarta.persistence.Column[] actualColumns = overrideColumns( columns, propertyHolder, inferredData ); - if ( ArrayHelper.isEmpty( actualColumns ) ) { + if ( isEmpty( actualColumns ) ) { return buildImplicitColumn( fractionalSeconds, inferredData, @@ -708,7 +710,7 @@ private static jakarta.persistence.Column[] overrideColumns( + " columns (every column must have exactly one '@AttributeOverride')" ); } LOG.debugf( "Column(s) overridden for property %s", inferredData.getPropertyName() ); - return ArrayHelper.isEmpty( overriddenCols ) ? null : overriddenCols; + return isEmpty( overriddenCols ) ? null : overriddenCols; } else { return columns; @@ -760,7 +762,7 @@ private static String getTableName( jakarta.persistence.Column column, Database database) { final String table = column.table(); - return table.isEmpty() + return table.isBlank() ? "" : database.getJdbcEnvironment().getIdentifierHelper().toIdentifier( table ).render(); } @@ -769,7 +771,7 @@ private static String getSqlType( MetadataBuildingContext context, jakarta.persistence.Column column) { final String columnDefinition = column.columnDefinition(); - return columnDefinition.isEmpty() + return columnDefinition.isBlank() ? null : context.getObjectNameNormalizer().applyGlobalQuoting( columnDefinition ); } @@ -844,7 +846,7 @@ private static String logicalColumnName( private static String getColumnName(Database database, jakarta.persistence.Column column) { final String name = column.name(); - return name.isEmpty() + return name.isBlank() ? null : database.getJdbcEnvironment().getIdentifierHelper().toIdentifier( name ).render(); } @@ -896,7 +898,7 @@ private void applyColumnCheckConstraint(jakarta.persistence.Column column) { } void applyCheckConstraints(jakarta.persistence.CheckConstraint[] checkConstraintAnnotationUsages) { - if ( CollectionHelper.isNotEmpty( checkConstraintAnnotationUsages ) ) { + if ( isNotEmpty( checkConstraintAnnotationUsages ) ) { for ( jakarta.persistence.CheckConstraint checkConstraintAnnotationUsage : checkConstraintAnnotationUsages ) { addCheckConstraint( checkConstraintAnnotationUsage.name(), @@ -959,10 +961,10 @@ private void processColumnTransformerExpressions(ColumnTransformer annotation) { } final String targetColumnName = annotation.forColumn(); - if ( isEmpty( targetColumnName ) + if ( isBlank( targetColumnName ) || targetColumnName.equals( logicalColumnName != null ? logicalColumnName : "" ) ) { - readExpression = nullIfEmpty( annotation.read() ); - writeExpression = nullIfEmpty( annotation.write() ); + readExpression = nullIfBlank( annotation.read() ); + writeExpression = nullIfBlank( annotation.write() ); } } @@ -1016,7 +1018,7 @@ private static AnnotatedColumns buildImplicitColumn( @Override public String toString() { - StringBuilder string = new StringBuilder(); + final StringBuilder string = new StringBuilder(); string.append( getClass().getSimpleName() ).append( "(" ); if ( isNotEmpty( logicalColumnName ) ) { string.append( "column='" ).append( logicalColumnName ).append( "'," ); @@ -1040,7 +1042,7 @@ private void applyColumnOptions(jakarta.persistence.Column column) { } private void applyColumnComment(jakarta.persistence.Column column) { - if ( !column.comment().isEmpty() ) { + if ( !column.comment().isBlank() ) { comment = column.comment(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedDiscriminatorColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedDiscriminatorColumn.java index 26f19d8c2c96..0be3f08c611f 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedDiscriminatorColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedDiscriminatorColumn.java @@ -65,10 +65,10 @@ public static AnnotatedDiscriminatorColumn buildDiscriminatorColumn( else if ( discriminatorColumn != null ) { discriminatorType = discriminatorColumn.discriminatorType(); column.setImplicit( false ); - if ( !discriminatorColumn.columnDefinition().isEmpty() ) { + if ( !discriminatorColumn.columnDefinition().isBlank() ) { column.setSqlType( discriminatorColumn.columnDefinition() ); } - if ( !discriminatorColumn.name().isEmpty() ) { + if ( !discriminatorColumn.name().isBlank() ) { column.setLogicalColumnName( discriminatorColumn.name() ); } column.setNullable( false ); @@ -82,7 +82,7 @@ else if ( discriminatorColumn != null ) { column.setLogicalColumnName( columnOverride.name() ); final String columnDefinition = columnOverride.columnDefinition(); - if ( !columnDefinition.isEmpty() ) { + if ( !columnDefinition.isBlank() ) { column.setSqlType( columnDefinition ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java index 196b5e6a1ab4..887812a1a145 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java @@ -176,12 +176,12 @@ public void applyJoinAnnotation(JoinColumn joinColumn, String defaultName) { setImplicit( false ); final String name = joinColumn.name(); - if ( !name.isEmpty() ) { + if ( !name.isBlank() ) { setLogicalColumnName( name ); } final String columnDefinition = joinColumn.columnDefinition(); - if ( !columnDefinition.isEmpty() ) { + if ( !columnDefinition.isBlank() ) { setSqlType( getBuildingContext().getObjectNameNormalizer().applyGlobalQuoting( columnDefinition ) ); } @@ -194,7 +194,7 @@ public void applyJoinAnnotation(JoinColumn joinColumn, String defaultName) { setOptions( joinColumn.options() ); final String table = joinColumn.table(); - if ( table.isEmpty() ) { + if ( table.isBlank() ) { setExplicitTableName( "" ); } else { @@ -248,11 +248,10 @@ private static AnnotatedJoinColumn buildExplicitInheritanceJoinColumn( } final ObjectNameNormalizer normalizer = context.getObjectNameNormalizer(); - final String columnDef = columnDefinition.isEmpty() ? null - : normalizer.toDatabaseIdentifierText( columnDefinition ); - final String logicalColumnName = columnName.isEmpty() - ? normalizer.normalizeIdentifierQuotingAsString( defaultColumnName ) - : normalizer.normalizeIdentifierQuotingAsString( columnName ); + final String columnDef = + columnDefinition.isBlank() ? null : normalizer.toDatabaseIdentifierText( columnDefinition ); + final String logicalColumnName = + normalizer.normalizeIdentifierQuotingAsString( columnName.isBlank() ? defaultColumnName : columnName ); final AnnotatedJoinColumn column = new AnnotatedJoinColumn(); column.setSqlType( columnDef ); column.setLogicalColumnName( logicalColumnName ); @@ -321,8 +320,9 @@ public void linkValueUsingDefaultColumnNaming( Column referencedColumn, PersistentClass referencedEntity, SimpleValue value) { - final String logicalReferencedColumn = getBuildingContext().getMetadataCollector() - .getLogicalColumnName( referencedEntity.getTable(), referencedColumn.getQuotedName() ); + final String logicalReferencedColumn = + getBuildingContext().getMetadataCollector() + .getLogicalColumnName( referencedEntity.getTable(), referencedColumn.getQuotedName() ); final String columnName = defaultColumnName( columnIndex, referencedEntity, logicalReferencedColumn ); //yuk side effect on an implicit column setLogicalColumnName( columnName ); @@ -407,15 +407,15 @@ protected void addColumnBinding(SimpleValue value) { final String referencedColumn = normalizer.normalizeIdentifierQuotingAsString( getReferencedColumn() ); final String unquotedLogColName = unquote( logicalColumnName ); final String unquotedRefColumn = unquote( referencedColumn ); - final String collectionColName = isNotEmpty( unquotedLogColName ) - ? unquotedLogColName - : getParent().getPropertyName() + '_' + unquotedRefColumn; + final String collectionColName = + isNotEmpty( unquotedLogColName ) + ? unquotedLogColName + : getParent().getPropertyName() + '_' + unquotedRefColumn; final InFlightMetadataCollector collector = getBuildingContext().getMetadataCollector(); - final String logicalCollectionColumnName = collector.getDatabase() - .getJdbcEnvironment() - .getIdentifierHelper() - .toIdentifier( collectionColName, isLogicalColumnQuoted ) - .render(); + final String logicalCollectionColumnName = + collector.getDatabase().getJdbcEnvironment().getIdentifierHelper() + .toIdentifier( collectionColName, isLogicalColumnQuoted ) + .render(); collector.addColumnNameBinding( value.getTable(), logicalCollectionColumnName, getMappingColumn() ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumns.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumns.java index 48621739cc03..120df0828a9d 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumns.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumns.java @@ -28,8 +28,6 @@ import org.hibernate.boot.spi.MetadataBuildingOptions; import org.hibernate.boot.spi.PropertyData; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.ArrayHelper; import org.hibernate.mapping.Column; import org.hibernate.mapping.Component; import org.hibernate.mapping.Join; @@ -45,10 +43,12 @@ import static org.hibernate.boot.model.internal.BinderHelper.findReferencedColumnOwner; import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath; -import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.isBlank; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.isQuoted; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; import static org.hibernate.internal.util.StringHelper.qualify; +import static org.hibernate.internal.util.collections.ArrayHelper.isEmpty; /** * A list of {@link jakarta.persistence.JoinColumn}s that form a single join @@ -94,7 +94,7 @@ public static AnnotatedJoinColumns buildJoinColumnsOrFormulas( final JoinFormula formula = columnOrFormula.formula(); final JoinColumn column = columnOrFormula.column(); final String annotationString = formula.value(); - if ( isNotEmpty( annotationString ) ) { + if ( isNotBlank( annotationString ) ) { AnnotatedJoinColumn.buildJoinFormula( formula, parent ); } else { @@ -114,8 +114,8 @@ private static void handlePropertyRef(MemberDetails attributeMember, AnnotatedJo } final String referencedPropertyName = propertyRefUsage.value(); - if ( StringHelper.isEmpty( referencedPropertyName ) ) { - throw new AnnotationException( "@PropertyRef did not specify target attribute name : " + attributeMember ); + if ( isBlank( referencedPropertyName ) ) { + throw new AnnotationException( "@PropertyRef did not specify target attribute name: " + attributeMember ); } parent.referencedProperty = referencedPropertyName; } @@ -165,7 +165,7 @@ public static AnnotatedJoinColumns buildJoinColumnsWithDefaultColumnSuffix( PropertyData inferredData, String defaultColumnSuffix, MetadataBuildingContext context) { - assert mappedBy == null || !mappedBy.isEmpty(); + assert mappedBy == null || !mappedBy.isBlank(); final String propertyName = inferredData.getPropertyName(); final String path = qualify( propertyHolder.getPath(), propertyName ); final JoinColumn[] overrides = propertyHolder.getOverriddenJoinColumn( path ); @@ -177,7 +177,7 @@ public static AnnotatedJoinColumns buildJoinColumnsWithDefaultColumnSuffix( parent.setPropertyName( getRelativePath( propertyHolder, propertyName ) ); parent.setMappedBy( mappedBy ); final MemberDetails memberDetails = inferredData.getAttributeMember(); - if ( ArrayHelper.isEmpty( actualColumns ) ) { + if ( isEmpty( actualColumns ) ) { AnnotatedJoinColumn.buildJoinColumn( null, // comment, diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java index 3fc27b90e018..e30b1a7a0371 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java @@ -226,7 +226,7 @@ private static void handleImport(ClassDetails annotatedClass, MetadataBuildingCo final String qualifiedName = annotatedClass.getName(); final String name = unqualify( qualifiedName ); final String rename = annotatedClass.getDirectAnnotationUsage( Imported.class ).rename(); - context.getMetadataCollector().addImport( rename.isEmpty() ? name : rename, qualifiedName ); + context.getMetadataCollector().addImport( rename.isBlank() ? name : rename, qualifiedName ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java index 20bbffbb6d5b..9b6f2d5ab267 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java @@ -71,9 +71,10 @@ import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnOrFormulaFromAnnotation; import static org.hibernate.boot.model.internal.AnyBinder.resolveImplicitDiscriminatorStrategy; import static org.hibernate.internal.util.StringHelper.isEmpty; -import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.qualifier; import static org.hibernate.internal.util.StringHelper.qualify; +import static org.hibernate.internal.util.collections.ArrayHelper.isEmpty; import static org.hibernate.models.spi.TypeDetailsHelper.resolveRawClass; import static org.hibernate.property.access.spi.BuiltInPropertyAccessStrategies.EMBEDDED; import static org.hibernate.property.access.spi.BuiltInPropertyAccessStrategies.NOOP; @@ -890,9 +891,10 @@ static PropertyData getPropertyOverriddenByMapperOrMapsId( .getSourceModelBuildingContext() .getClassDetailsRegistry(); final PersistentClass persistentClass = propertyHolder.getPersistentClass(); - final String name = isEmpty( persistentClass.getClassName() ) - ? persistentClass.getEntityName() - : persistentClass.getClassName(); + final String name = + isEmpty( persistentClass.getClassName() ) + ? persistentClass.getEntityName() + : persistentClass.getClassName(); final ClassDetails classDetails = classDetailsRegistry.resolveClassDetails( name ); final InFlightMetadataCollector metadataCollector = buildingContext.getMetadataCollector(); if ( propertyHolder.isInIdClass() ) { @@ -912,7 +914,7 @@ public static Map toAliasTableMap(SqlFragmentAlias[] aliases){ final Map ret = new HashMap<>(); for ( SqlFragmentAlias aliasAnnotation : aliases ) { final String table = aliasAnnotation.table(); - if ( isNotEmpty( table ) ) { + if ( isNotBlank( table ) ) { ret.put( aliasAnnotation.alias(), table ); } } @@ -952,7 +954,7 @@ public static String getCascadeStrategy( final CascadeType[] hibernateCascades = hibernateCascadeAnnotation == null ? null : hibernateCascadeAnnotation.value(); - if ( !ArrayHelper.isEmpty( hibernateCascades ) ) { + if ( !isEmpty( hibernateCascades ) ) { Collections.addAll( cascadeTypes, hibernateCascades ); } if ( orphanRemoval ) { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ClassPropertyHolder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ClassPropertyHolder.java index 0e692d6f5c91..51f4a0c0f396 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ClassPropertyHolder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ClassPropertyHolder.java @@ -127,12 +127,10 @@ public void startingProperty(MemberDetails property) { property.forEachAnnotationUsage( Convert.class, getSourceModelContext(), (usage) -> { final AttributeConversionInfo info = new AttributeConversionInfo( usage, property ); - if ( isEmpty( info.getAttributeName() ) ) { - attributeConversionInfoMap.put( propertyName, info ); - } - else { - attributeConversionInfoMap.put( propertyName + '.' + info.getAttributeName(), info ); - } + final String path = isEmpty( info.getAttributeName() ) + ? propertyName + : propertyName + '.' + info.getAttributeName(); + attributeConversionInfoMap.put( path, info ); } ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java index 3b2af005bf84..ba1ce62ab953 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java @@ -84,9 +84,7 @@ import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.FilterDefinition; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.collections.ArrayHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.jdbc.Expectation; import org.hibernate.mapping.Any; import org.hibernate.mapping.Backref; @@ -172,11 +170,12 @@ import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle; import static org.hibernate.internal.util.ReflectHelper.getDefaultSupplier; import static org.hibernate.internal.util.StringHelper.getNonEmptyOrConjunctionIfBothNonEmpty; -import static org.hibernate.internal.util.StringHelper.isEmpty; -import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.isBlank; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; import static org.hibernate.internal.util.StringHelper.qualify; import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; import static org.hibernate.mapping.MappingHelper.createLocalUserCollectionTypeBean; /** @@ -459,7 +458,7 @@ && isToManyAssociationWithinEmbeddableCollection( propertyHolder ) ) { if ( property.hasDirectAnnotationUsage( OrderColumn.class ) && manyToMany != null - && StringHelper.isNotEmpty( manyToMany.mappedBy() ) ) { + && isNotBlank( manyToMany.mappedBy() ) ) { throw new AnnotationException("Collection '" + getPath( propertyHolder, inferredData ) + "' is the unowned side of a bidirectional '@ManyToMany' and may not have an '@OrderColumn'"); } @@ -740,16 +739,16 @@ private static void bindJoinedTableAssociation( } collectionBinder.setExplicitAssociationTable( true ); - if ( CollectionHelper.isNotEmpty( jpaIndexes ) ) { + if ( isNotEmpty( jpaIndexes ) ) { associationTableBinder.setJpaIndex( jpaIndexes ); } - if ( !schema.isEmpty() ) { + if ( !schema.isBlank() ) { associationTableBinder.setSchema( schema ); } - if ( !catalog.isEmpty() ) { + if ( !catalog.isBlank() ) { associationTableBinder.setCatalog( catalog ); } - if ( !tableName.isEmpty() ) { + if ( !tableName.isBlank() ) { associationTableBinder.setName( tableName ); } associationTableBinder.setUniqueConstraints( uniqueConstraints ); @@ -910,7 +909,7 @@ private static ManagedBean createCustomType( Class implementation, Map parameters, MetadataBuildingContext buildingContext) { - final boolean hasParameters = CollectionHelper.isNotEmpty( parameters ); + final boolean hasParameters = isNotEmpty( parameters ); if ( !buildingContext.getBuildingOptions().isAllowExtensionsInCdi() ) { // if deferred container access is enabled, we locally create the user-type return createLocalUserCollectionTypeBean( role, implementation, hasParameters, parameters ); @@ -1094,13 +1093,13 @@ private static CollectionClassification determineCollectionClassification( final SourceModelBuildingContext sourceModelContext = buildingContext.getMetadataCollector().getSourceModelBuildingContext(); final ManyToMany manyToMany = property.getAnnotationUsage( ManyToMany.class, sourceModelContext ); - if ( manyToMany != null && !manyToMany.mappedBy().isEmpty() ) { + if ( manyToMany != null && !manyToMany.mappedBy().isBlank() ) { // We don't support @OrderColumn on the non-owning side of a many-to-many association. return CollectionClassification.BAG; } final OneToMany oneToMany = property.getAnnotationUsage( OneToMany.class, sourceModelContext ); - if ( oneToMany != null && !oneToMany.mappedBy().isEmpty() ) { + if ( oneToMany != null && !oneToMany.mappedBy().isBlank() ) { // Unowned to-many mappings are always considered BAG by default return CollectionClassification.BAG; } @@ -1268,7 +1267,7 @@ private void bindOptimisticLock(boolean isMappedBy) { private void bindCache() { //set cache - if ( isNotEmpty( cacheConcurrencyStrategy ) ) { + if ( isNotBlank( cacheConcurrencyStrategy ) ) { collection.setCacheConcurrencyStrategy( cacheConcurrencyStrategy ); collection.setCacheRegionName( cacheRegionName ); } @@ -1780,7 +1779,7 @@ private void handleJpaOrderBy(Collection collection, PersistentClass associatedC final String hqlOrderBy = extractHqlOrderBy( jpaOrderBy ); if ( hqlOrderBy != null ) { final String orderByFragment = buildOrderByClauseFromHql( hqlOrderBy, associatedClass ); - if ( isNotEmpty( orderByFragment ) ) { + if ( isNotBlank( orderByFragment ) ) { collection.setOrderBy( orderByFragment ); } } @@ -1824,7 +1823,7 @@ private void addFilter(boolean hasAssociationTable, Filter filterAnnotation) { final String alias = aliasAnnotation.alias(); final String table = aliasAnnotation.table(); - if ( isNotEmpty( table ) ) { + if ( isNotBlank( table ) ) { aliasTableMap.put( alias, table ); } @@ -1870,7 +1869,7 @@ private void handleWhere(boolean hasAssociationTable) { } final String whereJoinTableClause = getWhereJoinTableClause(); - if ( isNotEmpty( whereJoinTableClause ) ) { + if ( isNotBlank( whereJoinTableClause ) ) { if ( hasAssociationTable ) { // This is a many-to-many association. // Collection#setWhere is used to set the "where" clause that applies to the collection table @@ -1926,7 +1925,7 @@ private void addFilterJoinTable(boolean hasAssociationTable, FilterJoinTable fil final String alias = aliasAnnotation.alias(); final String table = aliasAnnotation.table(); - if ( isNotEmpty( table ) ) { + if ( isNotBlank( table ) ) { aliasTableMap.put( alias, table ); } @@ -1952,14 +1951,14 @@ private void addFilterJoinTable(boolean hasAssociationTable, FilterJoinTable fil private String getFilterConditionForJoinTable(FilterJoinTable filterJoinTableAnnotation) { final String condition = filterJoinTableAnnotation.condition(); - return condition.isEmpty() + return condition.isBlank() ? getDefaultFilterCondition( filterJoinTableAnnotation.name(), filterJoinTableAnnotation ) : condition; } private String getFilterCondition(Filter filter) { final String condition = filter.condition(); - return condition.isEmpty() + return condition.isBlank() ? getDefaultFilterCondition( filter.name(), filter ) : condition; } @@ -1972,7 +1971,7 @@ private String getDefaultFilterCondition(String name, Annotation annotation) { + "' for an undefined filter named '" + name + "'" ); } final String defaultCondition = definition.getDefaultFilterCondition(); - if ( isEmpty( defaultCondition ) ) { + if ( isBlank( defaultCondition ) ) { throw new AnnotationException( "Collection '" + qualify( propertyHolder.getPath(), propertyName ) + "' has a '@" + annotation.annotationType().getSimpleName() + "' with no 'condition' and no default condition was given by the '@FilterDef' named '" @@ -2016,7 +2015,7 @@ private static String buildOrderByClauseFromHql(String orderByFragment, Persiste if ( orderByFragment == null ) { return null; } - else if ( orderByFragment.isEmpty() ) { + else if ( orderByFragment.isBlank() ) { //order by id return buildOrderById( associatedClass, " asc" ); } @@ -2042,7 +2041,7 @@ private static String buildOrderById(PersistentClass associatedClass, String ord public static String adjustUserSuppliedValueCollectionOrderingFragment(String orderByFragment) { if ( orderByFragment != null ) { orderByFragment = orderByFragment.trim(); - if ( orderByFragment.isEmpty() || orderByFragment.equalsIgnoreCase( "asc" ) ) { + if ( orderByFragment.isBlank() || orderByFragment.equalsIgnoreCase( "asc" ) ) { // This indicates something like either: // `@OrderBy()` // `@OrderBy("asc") @@ -2124,7 +2123,7 @@ private DependantValue buildCollectionKey(AnnotatedJoinColumns joinColumns, OnDe if ( !ArrayHelper.isEmpty( joinColumnAnnotations ) ) { final JoinColumn joinColumnAnn = joinColumnAnnotations[0]; final ForeignKey joinColumnForeignKey = joinColumnAnn.foreignKey(); - if ( foreignKeyName.isEmpty() ) { + if ( foreignKeyName.isBlank() ) { foreignKeyName = joinColumnForeignKey.name(); foreignKeyDefinition = joinColumnForeignKey.foreignKeyDefinition(); foreignKeyOptions = joinColumnForeignKey.options(); @@ -2153,7 +2152,7 @@ private DependantValue buildCollectionKey(AnnotatedJoinColumns joinColumns, OnDe final OneToMany oneToManyAnn = property.getDirectAnnotationUsage( OneToMany.class ); final OnDelete onDeleteAnn = property.getDirectAnnotationUsage( OnDelete.class ); if ( oneToManyAnn != null - && !oneToManyAnn.mappedBy().isEmpty() + && !oneToManyAnn.mappedBy().isBlank() && ( onDeleteAnn == null || onDeleteAnn.action() != OnDeleteAction.CASCADE ) ) { // foreign key should be up to @ManyToOne side // @OnDelete generate "on delete cascade" foreign key @@ -2342,7 +2341,7 @@ private void handleCompositeCollectionElement( inheritanceStatePerClass ); collection.setElement( component ); - if ( isNotEmpty( hqlOrderBy ) ) { + if ( isNotBlank( hqlOrderBy ) ) { final String orderBy = adjustUserSuppliedValueCollectionOrderingFragment( hqlOrderBy ); if ( orderBy != null ) { collection.setOrderBy( orderBy ); @@ -2455,7 +2454,7 @@ private ManyToOne handleCollectionOfEntities( final JoinColumn[] inverseJoinColumns = joinTableAnn.inverseJoinColumns(); if ( !ArrayHelper.isEmpty( inverseJoinColumns ) ) { final JoinColumn joinColumnAnn = inverseJoinColumns[0]; - if ( foreignKeyName.isEmpty() ) { + if ( foreignKeyName.isBlank() ) { final ForeignKey inverseJoinColumnForeignKey = joinColumnAnn.foreignKey(); foreignKeyName = inverseJoinColumnForeignKey.name(); foreignKeyDefinition = inverseJoinColumnForeignKey.foreignKeyDefinition(); @@ -2544,7 +2543,7 @@ private void handleOwnedManyToMany(PersistentClass collectionEntity, boolean isC collector.getLogicalTableName( owner.getTable() ), collector.getFromMappedBy( owner.getEntityName(), joinColumns.getPropertyName() ) ); - if ( isEmpty( tableBinder.getName() ) ) { + if ( isBlank( tableBinder.getName() ) ) { //default value tableBinder.setDefaultName( owner.getClassName(), @@ -2581,7 +2580,7 @@ private void handleCheckConstraints(Table collectionTable) { private static void addCheckToCollection(Table collectionTable, Check check) { final String name = check.name(); final String constraint = check.constraints(); - collectionTable.addCheck( name.isEmpty() + collectionTable.addCheck( name.isBlank() ? new CheckConstraint( constraint ) : new CheckConstraint( name, constraint ) ); } @@ -2742,7 +2741,7 @@ private static String extractHqlOrderBy(OrderBy jpaOrderBy) { private static void checkFilterConditions(Collection collection) { //for now it can't happen, but sometime soon... - if ( ( !collection.getFilters().isEmpty() || isNotEmpty( collection.getWhere() ) ) + if ( ( !collection.getFilters().isEmpty() || isNotBlank( collection.getWhere() ) ) && collection.getFetchMode() == FetchMode.JOIN && !( collection.getElement() instanceof SimpleValue ) //SimpleValue (CollectionOfElements) are always SELECT but it does not matter && collection.getElement().getFetchMode() != FetchMode.JOIN ) { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionPropertyHolder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionPropertyHolder.java index 1aa15b811668..acee46bec058 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionPropertyHolder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionPropertyHolder.java @@ -109,16 +109,16 @@ private void applyLocalConvert( // elements cannot be converted so any @Convert likely meant the key, so we apply it to the key final AttributeConversionInfo info = new AttributeConversionInfo( convertAnnotation, collectionProperty ); + final String attributeName = info.getAttributeName(); if ( collection.isMap() ) { - boolean specCompliant = isNotEmpty( info.getAttributeName() ) - && ( info.getAttributeName().startsWith( "key" ) - || info.getAttributeName().startsWith( "value" ) ); + final boolean specCompliant = isNotEmpty( attributeName ) + && ( attributeName.startsWith( "key" ) || attributeName.startsWith( "value" ) ); if ( !specCompliant ) { log.nonCompliantMapConversion( collection.getRole() ); } } - if ( isEmpty( info.getAttributeName() ) ) { + if ( isEmpty( attributeName ) ) { // the @Convert did not name an attribute... if ( canElementBeConverted && canKeyBeConverted ) { if ( !isComposite ) { @@ -147,8 +147,8 @@ else if ( canElementBeConverted ) { final String elementPath; if ( canElementBeConverted && canKeyBeConverted ) { - keyPath = removePrefix( info.getAttributeName(), "key" ); - elementPath = removePrefix( info.getAttributeName(), "value" ); + keyPath = removePrefix( attributeName, "key" ); + elementPath = removePrefix( attributeName, "value" ); if ( keyPath == null && elementPath == null ) { // specified attributeName needs to have 'key.' or 'value.' prefix @@ -159,12 +159,12 @@ else if ( canElementBeConverted ) { } } else if ( canKeyBeConverted ) { - keyPath = removePrefix( info.getAttributeName(), "key", info.getAttributeName() ); + keyPath = removePrefix( attributeName, "key", attributeName ); elementPath = null; } else { keyPath = null; - elementPath = removePrefix( info.getAttributeName(), "value", info.getAttributeName() ); + elementPath = removePrefix( attributeName, "value", attributeName ); } if ( keyPath != null ) { @@ -179,7 +179,7 @@ else if ( elementPath != null ) { String.format( Locale.ROOT, "Could not determine how to apply @Convert(attributeName='%s') to collection [%s]", - info.getAttributeName(), + attributeName, collection.getRole() ) ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java index 66680b100bae..f98e1c8b314d 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java @@ -38,6 +38,7 @@ import static org.hibernate.boot.model.internal.BinderHelper.getPropertyOverriddenByMapperOrMapsId; import static org.hibernate.boot.model.internal.DialectOverridesAnnotationHelper.getOverridableAnnotation; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; /** * Do the initial discovery of columns metadata and apply defaults. @@ -245,7 +246,7 @@ private JoinColumnOrFormula[] joinColumnOrFormulaAnnotations(MemberDetails prope HibernateAnnotations.JOIN_COLUMN_OR_FORMULA, sourceModelContext ); - if ( CollectionHelper.isNotEmpty( annotations ) ) { + if ( isNotEmpty( annotations ) ) { return annotations; } @@ -259,7 +260,7 @@ private JoinColumn[] getJoinColumnAnnotations(MemberDetails property, PropertyDa JpaAnnotations.JOIN_COLUMN, sourceModelContext ); - if ( CollectionHelper.isNotEmpty( joinColumns ) ) { + if ( isNotEmpty( joinColumns ) ) { return joinColumns; } @@ -272,7 +273,7 @@ private JoinColumn[] getJoinColumnAnnotations(MemberDetails property, PropertyDa JpaAnnotations.PRIMARY_KEY_JOIN_COLUMN, sourceModelContext ); - if ( CollectionHelper.isNotEmpty( primaryKeyJoinColumns ) ) { + if ( isNotEmpty( primaryKeyJoinColumns ) ) { final JoinColumn[] adapters = new JoinColumn[primaryKeyJoinColumns.length]; for ( int i = 0; i < primaryKeyJoinColumns.length; i++ ) { final PrimaryKeyJoinColumn primaryKeyJoinColumn = primaryKeyJoinColumns[i]; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DelayedParameterizedTypeBean.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DelayedParameterizedTypeBean.java index dc791b0b7744..422ff95ec5ff 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DelayedParameterizedTypeBean.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DelayedParameterizedTypeBean.java @@ -11,6 +11,8 @@ import org.hibernate.resource.beans.spi.ManagedBean; import org.hibernate.usertype.ParameterizedType; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; + /** * ManagedBean implementation for delayed {@link ParameterizedType} * handling (parameter injection) for a UserCollectionType @@ -51,7 +53,7 @@ public static ManagedBean delayedConfigBean( String role, ManagedBean bean, Properties properties) { - if ( CollectionHelper.isNotEmpty( properties ) ) { + if ( isNotEmpty( properties ) ) { if ( ParameterizedType.class.isAssignableFrom( bean.getBeanClass() ) ) { return new DelayedParameterizedTypeBean<>( bean, properties ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DialectOverridesAnnotationHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DialectOverridesAnnotationHelper.java index 18675c99af66..edfcdfbd750c 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DialectOverridesAnnotationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/DialectOverridesAnnotationHelper.java @@ -18,6 +18,8 @@ import org.hibernate.models.spi.AnnotationTarget; import org.hibernate.models.spi.SourceModelBuildingContext; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; + /** * @author Sanne Grinovero * @author Steve Ebersole @@ -84,7 +86,7 @@ public static T getOverridableAnnotation( final Dialect dialect = context.getMetadataCollector().getDatabase().getDialect(); final Annotation[] overrides = element.getRepeatedAnnotationUsages( overrideAnnotation, sourceModelContext ); - if ( CollectionHelper.isNotEmpty( overrides ) ) { + if ( isNotEmpty( overrides ) ) { for ( int i = 0; i < overrides.length; i++ ) { //noinspection unchecked final DialectOverrider override = (DialectOverrider) overrides[i]; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java index c5dc04fa658b..dd26cf923865 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java @@ -27,7 +27,6 @@ import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.PropertyData; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.Component; import org.hibernate.mapping.Property; @@ -70,9 +69,10 @@ import static org.hibernate.boot.model.internal.PropertyBinder.processElementAnnotations; import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder; import static org.hibernate.internal.CoreLogging.messageLogger; -import static org.hibernate.internal.util.StringHelper.isEmpty; +import static org.hibernate.internal.util.StringHelper.isBlank; import static org.hibernate.internal.util.StringHelper.qualify; import static org.hibernate.internal.util.StringHelper.unqualify; +import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; /** * A binder responsible for interpreting {@link Embeddable} classes and producing @@ -232,7 +232,7 @@ private static void callTypeBinders(Component component, MetadataBuildingContext final SourceModelBuildingContext sourceModelContext = context.getMetadataCollector().getSourceModelBuildingContext(); final List metaAnnotatedAnnotations = annotatedClass.determineRawClass().getMetaAnnotated( TypeBinderType.class, sourceModelContext ); - if ( CollectionHelper.isEmpty( metaAnnotatedAnnotations ) ) { + if ( isEmpty( metaAnnotatedAnnotations ) ) { return; } @@ -712,7 +712,7 @@ private static String collectDiscriminatorValue( ? annotatedClass.getDirectAnnotationUsage( DiscriminatorValue.class ).value() : null; final String discriminatorValue; - if ( isEmpty( explicitValue ) ) { + if ( isBlank( explicitValue ) ) { final String name = unqualify( annotatedClass.getName() ); if ( "character".equals( discriminatorType.getName() ) ) { throw new AnnotationException( String.format( diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java index e927c76ed0ff..b7fe306488f1 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java @@ -77,7 +77,6 @@ import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.collections.ArrayHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.jdbc.Expectation; import org.hibernate.jpa.event.internal.CallbackDefinitionResolver; import org.hibernate.jpa.event.spi.CallbackType; @@ -155,10 +154,12 @@ import static org.hibernate.engine.OptimisticLockStyle.fromLockType; import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle; import static org.hibernate.internal.util.ReflectHelper.getDefaultSupplier; +import static org.hibernate.internal.util.StringHelper.isBlank; import static org.hibernate.internal.util.StringHelper.isEmpty; -import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; import static org.hibernate.internal.util.StringHelper.unqualify; +import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; @@ -367,7 +368,7 @@ private void handleCheckConstraints() { private void addCheckToEntity(Check check) { final String name = check.name(); final String constraint = check.constraints(); - persistentClass.addCheckConstraint( name.isEmpty() + persistentClass.addCheckConstraint( name.isBlank() ? new CheckConstraint( constraint ) : new CheckConstraint( name, constraint ) ); } @@ -1300,7 +1301,7 @@ private void bindEntityAnnotation() { throw new AssertionFailure( "@Entity should never be missing" ); } final String entityName = entity.name(); - name = entityName.isEmpty() ? unqualify( annotatedClass.getName() ) : entityName; + name = entityName.isBlank() ? unqualify( annotatedClass.getName() ) : entityName; } public boolean isRootEntity() { @@ -1351,7 +1352,7 @@ private void checkSubclassEntity() { + "' is annotated '@Immutable' but it is a subclass in an entity inheritance hierarchy" + " (only a root class may declare its mutability)" ); } - if ( isNotEmpty( where ) ) { + if ( isNotBlank( where ) ) { throw new AnnotationException( "Entity class '" + annotatedClass.getName() + "' specifies an '@SQLRestriction' but it is a subclass in an entity inheritance hierarchy" + " (only a root class may be specify a restriction)" ); @@ -1386,7 +1387,7 @@ private void registerImportName() { private void bindRootEntity() { final RootClass rootClass = (RootClass) persistentClass; rootClass.setMutable( isMutable() ); - if ( isNotEmpty( where ) ) { + if ( isNotBlank( where ) ) { rootClass.setWhere( where ); } if ( cacheConcurrentStrategy != null ) { @@ -1498,11 +1499,11 @@ private A resolveCustomSqlAnnotation( } final A override = dialectOverride.override(); - if ( isEmpty( tableName ) + if ( isBlank( tableName ) && isEmpty( ( (CustomSqlDetails) override ).table() ) ) { return override; } - else if ( isNotEmpty( tableName ) + else if ( isNotBlank( tableName ) && tableName.equals( ( (CustomSqlDetails) override ).table() ) ) { return override; } @@ -1516,7 +1517,7 @@ private void bindFilters() { for ( Filter filter : filters ) { final String filterName = filter.name(); String condition = filter.condition(); - if ( condition.isEmpty() ) { + if ( condition.isBlank() ) { condition = getDefaultFilterCondition( filterName ); } persistentClass.addFilter( @@ -1536,7 +1537,7 @@ private String getDefaultFilterCondition(String filterName) { + "' has a '@Filter' for an undefined filter named '" + filterName + "'" ); } final String condition = definition.getDefaultFilterCondition(); - if ( isEmpty( condition ) ) { + if ( isBlank( condition ) ) { throw new AnnotationException( "Entity '" + name + "' has a '@Filter' with no 'condition' and no default condition was given by the '@FilterDef' named '" + filterName + "'" ); @@ -1587,7 +1588,7 @@ public void bindDiscriminatorValue() { final String discriminatorValue = discriminatorValueAnn != null ? discriminatorValueAnn.value() : null; - if ( isEmpty( discriminatorValue ) ) { + if ( isBlank( discriminatorValue ) ) { final Value discriminator = persistentClass.getDiscriminator(); if ( discriminator == null ) { persistentClass.setDiscriminatorValue( name ); @@ -1646,12 +1647,13 @@ private void bindNaturalIdCache() { } final String region = naturalIdCacheAnn.region(); - if ( region.isEmpty() ) { + if ( region.isBlank() ) { final Cache explicitCacheAnn = annotatedClass.getAnnotationUsage( Cache.class, getSourceModelContext() ); - naturalIdCacheRegion = explicitCacheAnn != null && isNotEmpty( explicitCacheAnn.region() ) - ? explicitCacheAnn.region() + NATURAL_ID_CACHE_SUFFIX - : annotatedClass.getName() + NATURAL_ID_CACHE_SUFFIX; + naturalIdCacheRegion = + explicitCacheAnn != null && isNotBlank( explicitCacheAnn.region() ) + ? explicitCacheAnn.region() + NATURAL_ID_CACHE_SUFFIX + : annotatedClass.getName() + NATURAL_ID_CACHE_SUFFIX; } else { naturalIdCacheRegion = naturalIdCacheAnn.region(); @@ -1853,7 +1855,7 @@ public void bindTable( final EntityTableNamingStrategyHelper namingStrategyHelper = new EntityTableNamingStrategyHelper( persistentClass.getClassName(), entityName, name ); final Identifier logicalName = - isNotEmpty( tableName ) + isNotBlank( tableName ) ? namingStrategyHelper.handleExplicitName( tableName, context ) : namingStrategyHelper.determineImplicitName( context ); @@ -1917,7 +1919,7 @@ private void createPrimaryColumnsToSecondaryTable( final Annotation[] joinColumnSource = (Annotation[]) incoming; final AnnotatedJoinColumns annotatedJoinColumns; - if ( CollectionHelper.isEmpty( joinColumnSource ) ) { + if ( isEmpty( joinColumnSource ) ) { annotatedJoinColumns = createDefaultJoinColumn( propertyHolder ); } else { @@ -2047,7 +2049,7 @@ private SecondaryTable findMatchingSecondaryTable(Join join) { private SecondaryRow findMatchingSecondaryRowAnnotation(String tableName) { final SecondaryRow row = annotatedClass.getDirectAnnotationUsage( SecondaryRow.class ); - if ( row != null && ( row.table().isEmpty() || tableName.equals( row.table() ) ) ) { + if ( row != null && ( row.table().isBlank() || tableName.equals( row.table() ) ) ) { return row; } else { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java index 93c27d9504a9..aa977b7dbcd0 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java @@ -34,6 +34,7 @@ import static org.hibernate.boot.model.internal.AnnotationHelper.resolveJavaType; import static org.hibernate.boot.model.internal.AnnotationHelper.resolveUserType; import static org.hibernate.internal.CoreLogging.messageLogger; +import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; /** * @author Gavin King @@ -57,7 +58,7 @@ public static void bindFilterDef(FilterDef filterDef, MetadataBuildingContext co final Map paramJdbcMappings; final Map>> parameterResolvers; final ParamDef[] explicitParameters = filterDef.parameters(); - if ( CollectionHelper.isEmpty( explicitParameters ) ) { + if ( isEmpty( explicitParameters ) ) { paramJdbcMappings = emptyMap(); parameterResolvers = emptyMap(); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorParameters.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorParameters.java index b7902a3075f9..9d4f961d28a8 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorParameters.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorParameters.java @@ -25,8 +25,6 @@ import org.hibernate.id.enhanced.SingleNamingStrategy; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.mapping.Column; import org.hibernate.mapping.RootClass; import org.hibernate.mapping.SimpleValue; @@ -47,6 +45,8 @@ import static org.hibernate.id.PersistentIdentifierGenerator.PK; import static org.hibernate.id.PersistentIdentifierGenerator.TABLE; import static org.hibernate.id.PersistentIdentifierGenerator.TABLES; +import static org.hibernate.internal.util.StringHelper.isNotBlank; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; /** * Responsible for setting up the parameters which are passed to @@ -220,22 +220,22 @@ public static void interpretTableGenerator( definitionBuilder.addParam( org.hibernate.id.enhanced.TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, "true" ); final String catalog = tableGeneratorAnnotation.catalog(); - if ( StringHelper.isNotEmpty( catalog ) ) { + if ( isNotBlank( catalog ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.CATALOG, catalog ); } final String schema = tableGeneratorAnnotation.schema(); - if ( StringHelper.isNotEmpty( schema ) ) { + if ( isNotBlank( schema ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.SCHEMA, schema ); } final String table = tableGeneratorAnnotation.table(); - if ( StringHelper.isNotEmpty( table ) ) { + if ( isNotBlank( table ) ) { definitionBuilder.addParam( org.hibernate.id.enhanced.TableGenerator.TABLE_PARAM, table ); } final String pkColumnName = tableGeneratorAnnotation.pkColumnName(); - if ( StringHelper.isNotEmpty( pkColumnName ) ) { + if ( isNotBlank( pkColumnName ) ) { definitionBuilder.addParam( org.hibernate.id.enhanced.TableGenerator.SEGMENT_COLUMN_PARAM, pkColumnName @@ -243,7 +243,7 @@ public static void interpretTableGenerator( } final String pkColumnValue = tableGeneratorAnnotation.pkColumnValue(); - if ( StringHelper.isNotEmpty( pkColumnValue ) ) { + if ( isNotBlank( pkColumnValue ) ) { definitionBuilder.addParam( org.hibernate.id.enhanced.TableGenerator.SEGMENT_VALUE_PARAM, pkColumnValue @@ -251,7 +251,7 @@ public static void interpretTableGenerator( } final String valueColumnName = tableGeneratorAnnotation.valueColumnName(); - if ( StringHelper.isNotEmpty( valueColumnName ) ) { + if ( isNotBlank( valueColumnName ) ) { definitionBuilder.addParam( org.hibernate.id.enhanced.TableGenerator.VALUE_COLUMN_PARAM, valueColumnName @@ -259,7 +259,7 @@ public static void interpretTableGenerator( } final String options = tableGeneratorAnnotation.options(); - if ( StringHelper.isNotEmpty( options ) ) { + if ( isNotBlank( options ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.OPTIONS, options @@ -279,7 +279,7 @@ public static void interpretTableGenerator( // TODO : implement unique-constraint support final UniqueConstraint[] uniqueConstraints = tableGeneratorAnnotation.uniqueConstraints(); - if ( CollectionHelper.isNotEmpty( uniqueConstraints ) ) { + if ( isNotEmpty( uniqueConstraints ) ) { LOG.ignoringTableGeneratorConstraints( tableGeneratorAnnotation.name() ); } } @@ -292,17 +292,17 @@ public static void interpretSequenceGenerator( definitionBuilder.setStrategy( SequenceStyleGenerator.class.getName() ); final String catalog = sequenceGeneratorAnnotation.catalog(); - if ( StringHelper.isNotEmpty( catalog ) ) { + if ( isNotBlank( catalog ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.CATALOG, catalog ); } final String schema = sequenceGeneratorAnnotation.schema(); - if ( StringHelper.isNotEmpty( schema ) ) { + if ( isNotBlank( schema ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.SCHEMA, schema ); } final String sequenceName = sequenceGeneratorAnnotation.sequenceName(); - if ( StringHelper.isNotEmpty( sequenceName ) ) { + if ( isNotBlank( sequenceName ) ) { definitionBuilder.addParam( SequenceStyleGenerator.SEQUENCE_PARAM, sequenceName ); } @@ -316,7 +316,7 @@ public static void interpretSequenceGenerator( ); final String options = sequenceGeneratorAnnotation.options(); - if ( StringHelper.isNotEmpty( options ) ) { + if ( isNotBlank( options ) ) { definitionBuilder.addParam( PersistentIdentifierGenerator.OPTIONS, options ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ImplicitToOneJoinTableSecondPass.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ImplicitToOneJoinTableSecondPass.java index e79cb6e8fb5c..e02053b9ef0f 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ImplicitToOneJoinTableSecondPass.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ImplicitToOneJoinTableSecondPass.java @@ -11,7 +11,6 @@ import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.PropertyData; import org.hibernate.boot.spi.SecondPass; -import org.hibernate.internal.util.StringHelper; import org.hibernate.mapping.Join; import org.hibernate.mapping.ManyToOne; import org.hibernate.mapping.PersistentClass; @@ -21,6 +20,7 @@ import static org.hibernate.boot.model.internal.ToOneBinder.getReferenceEntityName; import static org.hibernate.internal.util.StringHelper.isEmpty; +import static org.hibernate.internal.util.StringHelper.isNotBlank; /** * For {@link jakarta.persistence.ManyToOne} and {@link jakarta.persistence.OneToOne} @@ -88,17 +88,17 @@ private TableBinder createTableBinder() { tableBinder.setBuildingContext( context ); final String schema = joinTable.schema(); - if ( StringHelper.isNotEmpty( schema ) ) { + if ( isNotBlank( schema ) ) { tableBinder.setSchema( schema ); } final String catalog = joinTable.catalog(); - if ( StringHelper.isNotEmpty( catalog ) ) { + if ( isNotBlank( catalog ) ) { tableBinder.setCatalog( catalog ); } final String tableName = joinTable.name(); - if ( StringHelper.isNotEmpty( tableName ) ) { + if ( isNotBlank( tableName ) ) { tableBinder.setName( tableName ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/IndexColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/IndexColumn.java index a0334fe91436..d737e5ae5ab2 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/IndexColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/IndexColumn.java @@ -96,7 +96,7 @@ public static IndexColumn buildColumnFromOrderColumn( if ( orderColumn != null ) { final String sqlType = nullIfEmpty( orderColumn.columnDefinition() ); final String explicitName = orderColumn.name(); - final String name = explicitName.isEmpty() + final String name = explicitName.isBlank() ? inferredData.getPropertyName() + "_ORDER" : explicitName; final IndexColumn column = new IndexColumn(); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryBinder.java index 9bc6a9ea87f0..102f0193b851 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryBinder.java @@ -36,7 +36,6 @@ import org.hibernate.internal.log.DeprecationLogger; import org.hibernate.jpa.HibernateHints; import org.hibernate.jpa.internal.util.FlushModeTypeHelper; -import org.hibernate.models.internal.util.StringHelper; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.query.sql.internal.ParameterParser; @@ -60,6 +59,7 @@ import static org.hibernate.internal.util.collections.ArrayHelper.isEmpty; import static org.hibernate.internal.util.collections.CollectionHelper.determineProperSizing; import static org.hibernate.internal.util.collections.CollectionHelper.setOf; +import static org.hibernate.models.internal.util.StringHelper.isEmpty; /** * Responsible for reading named queries defined in annotations and registering @@ -85,7 +85,7 @@ public static void bindQuery( final String queryString = namedQuery.query(); final Class resultClass = namedQuery.resultClass(); - if ( queryName.isEmpty() ) { + if ( queryName.isBlank() ) { throw new AnnotationException( "Class or package level '@NamedQuery' annotation must specify a 'name'" ); } @@ -135,7 +135,7 @@ public static void bindNativeQuery( final String registrationName = namedNativeQuery.name(); final String queryString = namedNativeQuery.query(); - if ( registrationName.isEmpty() ) { + if ( registrationName.isBlank() ) { throw new AnnotationException( "Class or package level '@NamedNativeQuery' annotation must specify a 'name'" ); } @@ -223,7 +223,7 @@ public static void bindNativeQuery( final String registrationName = namedNativeQuery.name(); - if ( registrationName.isEmpty() ) { + if ( registrationName.isBlank() ) { throw new AnnotationException( "Class or package level '@NamedNativeQuery' annotation must specify a 'name'" ); } @@ -321,7 +321,7 @@ public static NamedProcedureCallDefinition createStoredProcedure( final String typeName = builder.getParameterTypes().get( paramName ); final ClassDetails classDetails; - if ( StringHelper.isEmpty( typeName ) ) { + if ( isEmpty( typeName ) ) { classDetails = ClassDetails.VOID_CLASS_DETAILS; } else { @@ -391,7 +391,7 @@ public static void bindQuery( final String registrationName = namedQuery.name(); final Class resultClass = namedQuery.resultClass(); - if ( registrationName.isEmpty() ) { + if ( registrationName.isBlank() ) { throw new AnnotationException( "Class or package level '@NamedQuery' annotation must specify a 'name'" ); } @@ -452,7 +452,7 @@ public static void bindNamedStoredProcedureQuery( MetadataBuildingContext context, boolean isDefault) { if ( namedStoredProcedureQuery != null ) { - if ( namedStoredProcedureQuery.name().isEmpty() ) { + if ( namedStoredProcedureQuery.name().isBlank() ) { throw new AnnotationException( "Class or package level '@NamedStoredProcedureQuery' annotation must specify a 'name'" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryHintDefinition.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryHintDefinition.java index 6e8f4feebd2d..0ddfc3c513cc 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryHintDefinition.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryHintDefinition.java @@ -25,6 +25,8 @@ import jakarta.persistence.NamedQuery; import jakarta.persistence.QueryHint; +import static java.util.Collections.emptyMap; +import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; import static org.hibernate.internal.util.collections.CollectionHelper.mapOfSize; /** @@ -36,8 +38,8 @@ public class QueryHintDefinition { public QueryHintDefinition(String queryName, final QueryHint[] hints) { this.queryName = queryName; - if ( CollectionHelper.isEmpty( hints ) ) { - hintsMap = Collections.emptyMap(); + if ( isEmpty( hints ) ) { + hintsMap = emptyMap(); } else { final Map hintsMap = mapOfSize( hints.length ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/SoftDeleteHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/SoftDeleteHelper.java index f7e0fcb23c46..2451cde4a5cc 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/SoftDeleteHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/SoftDeleteHelper.java @@ -11,7 +11,6 @@ import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.dialect.Dialect; -import org.hibernate.internal.util.StringHelper; import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.Column; import org.hibernate.mapping.SoftDeletable; @@ -32,6 +31,7 @@ import org.hibernate.type.descriptor.jdbc.JdbcLiteralFormatter; import static org.hibernate.internal.util.StringHelper.coalesce; +import static org.hibernate.internal.util.StringHelper.isBlank; import static org.hibernate.query.sqm.ComparisonOperator.EQUAL; /** @@ -93,7 +93,7 @@ private static Column createSoftDeleteIndicatorColumn( softDeleteColumn.setNullable( false ); softDeleteColumn.setUnique( false ); softDeleteColumn.setOptions( softDeleteConfig.options() ); - if ( StringHelper.isEmpty( softDeleteConfig.comment() ) ) { + if ( isBlank( softDeleteConfig.comment() ) ) { softDeleteColumn.setComment( "Soft-delete indicator" ); } else { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java index 60e876c3fc92..b47cc0e0a1e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java @@ -22,8 +22,6 @@ import org.hibernate.dialect.Dialect; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.mapping.Any; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.mapping.CheckConstraint; import org.hibernate.mapping.Collection; import org.hibernate.mapping.Column; @@ -45,10 +43,12 @@ import jakarta.persistence.Index; import jakarta.persistence.UniqueConstraint; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.isNotEmpty; import static org.hibernate.internal.util.StringHelper.isQuoted; -import static org.hibernate.internal.util.StringHelper.nullIfEmpty; +import static org.hibernate.internal.util.StringHelper.nullIfBlank; import static org.hibernate.internal.util.StringHelper.unquote; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; /** * Stateful binder responsible for producing instances of {@link Table}. @@ -492,8 +492,8 @@ private static Table buildAndFillTable( final InFlightMetadataCollector metadataCollector = buildingContext.getMetadataCollector(); final Table table = addTable( - nullIfEmpty( schema ), - nullIfEmpty( catalog ), + nullIfBlank( schema ), + nullIfBlank( catalog ), logicalName, isAbstract, buildingContext, @@ -868,7 +868,7 @@ static void addJpaIndexes(Table table, Index[] indexes, MetadataBuildingContext static void addTableCheck( Table table, jakarta.persistence.CheckConstraint[] checkConstraintAnnotationUsages) { - if ( CollectionHelper.isNotEmpty( checkConstraintAnnotationUsages ) ) { + if ( isNotEmpty( checkConstraintAnnotationUsages ) ) { for ( jakarta.persistence.CheckConstraint checkConstraintAnnotationUsage : checkConstraintAnnotationUsages ) { table.addCheck( new CheckConstraint( @@ -882,13 +882,13 @@ static void addTableCheck( } static void addTableComment(Table table, String comment) { - if ( StringHelper.isNotEmpty( comment ) ) { + if ( isNotBlank( comment ) ) { table.setComment( comment ); } } static void addTableOptions(Table table, String options) { - if ( StringHelper.isNotEmpty( options ) ) { + if ( isNotBlank( options ) ) { table.setOptions( options ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ToOneBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ToOneBinder.java index f1143d740641..caf1073bf0cf 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ToOneBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ToOneBinder.java @@ -22,7 +22,6 @@ import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.PropertyData; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.internal.util.StringHelper; import org.hibernate.mapping.Join; import org.hibernate.mapping.KeyValue; import org.hibernate.mapping.SimpleValue; @@ -53,7 +52,8 @@ import static org.hibernate.boot.model.internal.BinderHelper.isDefault; import static org.hibernate.boot.model.internal.BinderHelper.noConstraint; import static org.hibernate.internal.CoreLogging.messageLogger; -import static org.hibernate.internal.util.StringHelper.isEmpty; +import static org.hibernate.internal.util.StringHelper.isBlank; +import static org.hibernate.internal.util.StringHelper.isNotBlank; import static org.hibernate.internal.util.StringHelper.nullIfEmpty; import static org.hibernate.internal.util.StringHelper.qualify; @@ -158,7 +158,7 @@ private static void bindManyToOne( boolean inSecondPass, PropertyBinder propertyBinder, MetadataBuildingContext context) { - if ( joinTable != null && !isEmpty( joinTable.name() ) ) { + if ( joinTable != null && !isBlank( joinTable.name() ) ) { final Join join = propertyHolder.addJoin( joinTable, false ); // TODO: if notFoundAction!=null should we call join.disableForeignKeyCreation() ? for ( AnnotatedJoinColumn joinColumn : joinColumns.getJoinColumns() ) { @@ -173,7 +173,7 @@ private static void bindManyToOne( final org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( context, joinColumns.getTable() ); - if ( joinTable != null && isEmpty( joinTable.name() ) ) { + if ( joinTable != null && isBlank( joinTable.name() ) ) { context.getMetadataCollector().addSecondPass( new ImplicitToOneJoinTableSecondPass( propertyHolder, inferredData, @@ -274,7 +274,7 @@ private static boolean handleSpecjSyntax( if ( property.hasDirectAnnotationUsage( ManyToOne.class ) && joinColumn != null ) { final String joinColumnName = joinColumn.name(); - if ( StringHelper.isNotEmpty( joinColumnName ) + if ( isNotBlank( joinColumnName ) && joinColumnName.equals( columnName ) && !property.hasDirectAnnotationUsage( MapsId.class ) ) { hasSpecjManyToOne = true; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/XMLContext.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/XMLContext.java index 8089bc3001d7..558c80e3912d 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/XMLContext.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/XMLContext.java @@ -29,11 +29,13 @@ import org.hibernate.boot.spi.ClassLoaderAccess; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.internal.util.StringHelper; import jakarta.persistence.AccessType; import jakarta.persistence.AttributeConverter; +import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.qualify; + /** * A helper for consuming orm.xml mappings. * @@ -189,10 +191,9 @@ private void setLocalAttributeConverterDefinitions(List conve } public static String buildSafeClassName(String className, String defaultPackageName) { - if ( className.indexOf( '.' ) < 0 && StringHelper.isNotEmpty( defaultPackageName ) ) { - className = StringHelper.qualify( defaultPackageName, className ); - } - return className; + return className.indexOf( '.' ) < 0 && isNotEmpty( defaultPackageName ) + ? qualify( defaultPackageName, className ) + : className; } public static String buildSafeClassName(String className, Default defaults) { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java b/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java index aca49e4afb0d..764034ea56e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java @@ -9,6 +9,8 @@ import org.hibernate.dialect.Dialect; import org.hibernate.internal.util.StringHelper; +import static org.hibernate.internal.util.StringHelper.isBlank; + /** * Models an identifier (name), which may or may not be quoted. * @@ -75,7 +77,7 @@ public static Identifier toIdentifier(String text, boolean quote) { * @return The identifier form, or {@code null} if text was {@code null} */ public static Identifier toIdentifier(String text, boolean quote, boolean quoteOnNonIdentifierChar) { - if ( StringHelper.isEmpty( text ) ) { + if ( isBlank( text ) ) { return null; } int start = 0; diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java b/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java index 5d42c174a117..41aee6f2fe74 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java @@ -570,6 +570,10 @@ public static boolean isEmpty(@Nullable String string) { return string == null || string.isEmpty(); } + public static boolean isNotBlank(@Nullable String string) { + return string != null && !string.isBlank(); + } + public static boolean isBlank(@Nullable String string) { return string == null || string.isBlank(); } @@ -813,6 +817,10 @@ public static String nullIfEmpty(@Nullable String value) { return isEmpty( value ) ? null : value; } + public static String nullIfBlank(@Nullable String value) { + return isBlank( value ) ? null : value; + } + public static String subStringNullIfEmpty(String value, Character startChar) { if ( isEmpty( value ) ) { return null;