From d0ac205918a63f22b13bc06c703b55ab108c7f17 Mon Sep 17 00:00:00 2001 From: Fabio Massimo Ercoli Date: Fri, 10 Dec 2021 12:45:12 +0100 Subject: [PATCH] HSEARCH-3277 Get decimal scale from size instead of the column --- ...mMappingPropertiesMetadataContributor.java | 9 ++++++++- ...HibernateOrmBasicTypeMetadataProvider.java | 20 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMappingPropertiesMetadataContributor.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMappingPropertiesMetadataContributor.java index 6c664e6c78e..1ccef791a13 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMappingPropertiesMetadataContributor.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMappingPropertiesMetadataContributor.java @@ -10,6 +10,9 @@ import java.util.List; import java.util.StringTokenizer; +import org.hibernate.boot.Metadata; +import org.hibernate.dialect.Dialect; +import org.hibernate.engine.jdbc.Size; import org.hibernate.mapping.Column; import org.hibernate.mapping.Component; import org.hibernate.mapping.OneToMany; @@ -95,13 +98,17 @@ else if ( value instanceof SimpleValue ) { private void collectScale(PojoAdditionalMetadataCollectorPropertyNode collector, Value value) { Iterator columnIterator = value.getColumnIterator(); + Dialect dialect = basicTypeMetadataProvider.getDialect(); + Metadata metadata = basicTypeMetadataProvider.getMetadata(); + while ( columnIterator.hasNext() ) { Selectable mappedColumn = columnIterator.next(); if ( !(mappedColumn instanceof Column) ) { continue; } Column column = (Column) mappedColumn; - Integer scale = column.getScale(); + Size size = column.getColumnSize( dialect, metadata ); + Integer scale = size.getScale(); if ( scale == null ) { continue; } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java index 77d7b8f9821..ace5fac92e4 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java @@ -16,6 +16,7 @@ import org.hibernate.MappingException; import org.hibernate.boot.Metadata; +import org.hibernate.dialect.Dialect; import org.hibernate.mapping.Component; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; @@ -34,7 +35,7 @@ public static HibernateOrmBasicTypeMetadataProvider create(Metadata metadata) { new TreeSet<>( Comparator.comparing( PersistentClass::getEntityName ) ); persistentClasses.addAll( metadata.getEntityBindings() ); - Builder builder = new Builder(); + Builder builder = new Builder( metadata ); for ( PersistentClass persistentClass : persistentClasses ) { collectPersistentClass( builder, persistentClass ); @@ -221,6 +222,8 @@ private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataP } } + private final Metadata metadata; + private final Map persistentClasses; private final Map, HibernateOrmBasicClassTypeMetadata> classTypeMetadata; private final Map dynamicMapTypeMetadata; @@ -229,6 +232,7 @@ private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataP private final HibernateOrmRawTypeIdentifierResolver typeIdentifierResolver; private HibernateOrmBasicTypeMetadataProvider(Builder builder) { + this.metadata = builder.metadata; this.persistentClasses = builder.persistentClasses; this.classTypeMetadata = builder.classTypeMetadata; this.dynamicMapTypeMetadata = builder.dynamicMapTypeMetadata; @@ -236,6 +240,14 @@ private HibernateOrmBasicTypeMetadataProvider(Builder builder) { this.typeIdentifierResolver = builder.typeIdentifierResolverBuilder.build(); } + public Metadata getMetadata() { + return metadata; + } + + public Dialect getDialect() { + return metadata.getDatabase().getDialect(); + } + public Collection getPersistentClasses() { return persistentClasses.values(); } @@ -267,6 +279,8 @@ Set getKnownDynamicMapTypeNames() { } private static class Builder { + private final Metadata metadata; + private final Map persistentClasses = new LinkedHashMap<>(); private final Map, HibernateOrmBasicClassTypeMetadata> classTypeMetadata = new LinkedHashMap<>(); private final Map dynamicMapTypeMetadata = new LinkedHashMap<>(); @@ -275,6 +289,10 @@ private static class Builder { private final HibernateOrmRawTypeIdentifierResolver.Builder typeIdentifierResolverBuilder = new HibernateOrmRawTypeIdentifierResolver.Builder(); + public Builder(Metadata metadata) { + this.metadata = metadata; + } + HibernateOrmBasicTypeMetadataProvider build() { return new HibernateOrmBasicTypeMetadataProvider( this ); }