diff --git a/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java b/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java index 6d8d98f8..8161b607 100644 --- a/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java +++ b/src/main/java/com/mongodb/hibernate/dialect/MongoDialect.java @@ -151,6 +151,8 @@ *
For the documentation on the supported HQL * functions see {@link #initializeFunctionRegistry(FunctionContributions)}. + * + *
Thread-safe, immutable, as per the documentation of {@link Dialect}.
*/
@Sealed
public class MongoDialect extends Dialect {
@@ -196,7 +198,7 @@ protected void checkVersion() {
@Override
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
- return new MongoTranslatorFactory();
+ return MongoTranslatorFactory.INSTANCE;
}
@Override
@@ -350,6 +352,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionRegistry.register("array_includes_nullable", new MongoArrayIncludesFunction(true, typeConfiguration));
}
+ /** The {@link MutationOperation} returned from this method does not have to be thread-safe. */
@Override
public MutationOperation createOptionalTableUpdateOperation(
EntityMutationTarget mutationTarget,
@@ -372,6 +375,7 @@ public void appendDatetimeFormat(SqlAppender appender, String format) {
throw new FeatureNotSupportedException("TODO-HIBERNATE-88 https://jira.mongodb.org/browse/HIBERNATE-88");
}
+ /** The {@link SQLExceptionConversionDelegate} returned from this method must be thread-safe. */
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return (sqlException, exceptionMessage, mql) -> new JDBCException(exceptionMessage, sqlException, mql);
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 1d475b6b..6fb4f835 100644
--- a/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java
+++ b/src/main/java/com/mongodb/hibernate/internal/extension/MongoAdditionalMappingContributor.java
@@ -38,7 +38,10 @@
import java.util.Set;
import java.util.StringJoiner;
import org.hibernate.annotations.Struct;
+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;
@@ -50,6 +53,10 @@
import org.hibernate.type.BasicPluralType;
import org.hibernate.type.ComponentType;
+/**
+ * The instance methods of {@link AdditionalMappingContributor} 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 {
/**
* We do not support these characters because BSON fields with names containing them must be handled specially as
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 01d0adf0..7174b093 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
@@ -33,13 +33,16 @@
import java.util.Map;
import java.util.Set;
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;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.jspecify.annotations.Nullable;
+/** Thread-safe. */
public final class StandardServiceRegistryScopedState implements Service {
@Serial
private static final long serialVersionUID = 1L;
@@ -61,17 +64,27 @@ private void writeObject(ObjectOutputStream out) throws IOException {
"This class is not designed to be serialized despite it having to implement `Serializable`");
}
+ /**
+ * The instance methods of {@link org.hibernate.service.spi.ServiceContributor} 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() {}
@Override
public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) {
serviceRegistryBuilder.addInitiator(new StandardServiceInitiator