From 36b51cd5888b6384b4cffed21dda8a2dd1b505d8 Mon Sep 17 00:00:00 2001 From: Valentin Kovalenko Date: Wed, 26 Mar 2025 17:18:51 -0600 Subject: [PATCH 1/2] Add internal docs and do other improvements --- .../java/com/mongodb/hibernate/dialect/MongoDialect.java | 2 +- .../extension/MongoAdditionalMappingContributor.java | 9 +++++++++ .../service/StandardServiceRegistryScopedState.java | 7 +++++++ .../internal/translate/MongoTranslatorFactory.java | 4 ++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java b/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java index c10ceb31..5154919c 100644 --- a/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java +++ b/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java @@ -46,6 +46,6 @@ protected DatabaseVersion getMinimumSupportedVersion() { @Override public SqlAstTranslatorFactory getSqlAstTranslatorFactory() { - return new MongoTranslatorFactory(); + return MongoTranslatorFactory.INSTANCE; } } diff --git a/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java b/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java index 668a394a..f63f28c8 100644 --- a/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java +++ b/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java @@ -23,13 +23,22 @@ import com.mongodb.hibernate.internal.FeatureNotSupportedException; import org.hibernate.annotations.DynamicInsert; +import org.hibernate.boot.Metadata; +import org.hibernate.boot.MetadataSources; import org.hibernate.boot.ResourceStreamLocator; +import org.hibernate.boot.registry.BootstrapServiceRegistry; import org.hibernate.boot.spi.AdditionalMappingContributions; import org.hibernate.boot.spi.AdditionalMappingContributor; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.mapping.PersistentClass; +/** + * The instance methods like {@link #getContributorName()}, {@link #contribute(AdditionalMappingContributions, + * InFlightMetadataCollector, ResourceStreamLocator, MetadataBuildingContext)} are called multiple times if multiple + * {@link Metadata} instances are {@linkplain MetadataSources#buildMetadata() built} using the same + * {@link BootstrapServiceRegistry}. + */ public final class MongoAdditionalMappingContributor implements AdditionalMappingContributor { public MongoAdditionalMappingContributor() {} diff --git a/src/main/java/com/mongodb/hibernate/internal/extension/service/StandardServiceRegistryScopedState.java b/src/main/java/com/mongodb/hibernate/internal/extension/service/StandardServiceRegistryScopedState.java index c14cc5ad..93e569fd 100644 --- a/src/main/java/com/mongodb/hibernate/internal/extension/service/StandardServiceRegistryScopedState.java +++ b/src/main/java/com/mongodb/hibernate/internal/extension/service/StandardServiceRegistryScopedState.java @@ -27,7 +27,9 @@ import java.io.Serial; import java.util.Map; import org.hibernate.HibernateException; +import org.hibernate.boot.registry.BootstrapServiceRegistry; import org.hibernate.boot.registry.StandardServiceInitiator; +import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.service.Service; import org.hibernate.service.UnknownServiceException; @@ -49,6 +51,11 @@ public MongoConfiguration getConfiguration() { return config; } + /** + * The instance methods like {@link #contribute(StandardServiceRegistryBuilder)} are called multiple times if + * multiple {@link StandardServiceRegistry} instances are {@linkplain StandardServiceRegistryBuilder#build() built} + * using the same {@link BootstrapServiceRegistry}. + */ public static final class ServiceContributor implements org.hibernate.service.spi.ServiceContributor { public ServiceContributor() {} diff --git a/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java b/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java index 9a1a87fe..65342f34 100644 --- a/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java +++ b/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java @@ -27,6 +27,10 @@ import org.hibernate.sql.model.jdbc.JdbcMutationOperation; public final class MongoTranslatorFactory implements SqlAstTranslatorFactory { + public static MongoTranslatorFactory INSTANCE = new MongoTranslatorFactory(); + + private MongoTranslatorFactory() {} + @Override public SqlAstTranslator buildSelectTranslator( SessionFactoryImplementor sessionFactoryImplementor, SelectStatement selectStatement) { From 11a654584794a5dc4f71654d4daf838b003e3c9b Mon Sep 17 00:00:00 2001 From: Valentin Kovalenko Date: Wed, 26 Mar 2025 22:35:28 -0600 Subject: [PATCH 2/2] Document that `MongoTranslatorFactory` is thread-safe. --- .../hibernate/internal/translate/MongoTranslatorFactory.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java b/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java index 65342f34..d445366d 100644 --- a/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java +++ b/src/main/java/com/mongodb/hibernate/internal/translate/MongoTranslatorFactory.java @@ -26,6 +26,9 @@ import org.hibernate.sql.model.ast.TableMutation; import org.hibernate.sql.model.jdbc.JdbcMutationOperation; +/** + * Tread-safe. + */ public final class MongoTranslatorFactory implements SqlAstTranslatorFactory { public static MongoTranslatorFactory INSTANCE = new MongoTranslatorFactory();