micronaut-sql
                                
                                
                                
                                    micronaut-sql copied to clipboard
                            
                            
                            
                        Multiple possible bean candidates found: [`DefaultInternalConstraintValidatorFactory`, `DefaultConstraintValidatorFactory`]
Expected Behavior
No exception on starting up a default Micronaut Data + Hibernate JPA app.
Actual Behaviour
The application fails to start with the following error:
ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [io.micronaut.configuration.hibernate.jpa.conf.sessionfactory.configure.internal.ValidatorFactoryConfigurer]
Message: Multiple possible bean candidates found: [DefaultInternalConstraintValidatorFactory, DefaultConstraintValidatorFactory]
Path Taken: SessionFactoryPerDataSourceFactory.buildHibernateSessionFactoryBuilder(SessionFactoryBuilder sessionFactoryBuilder) --> new SessionFactoryPerDataSourceFactory(Environment environment,[List configures],StandardServiceRegistryBuilderCreator serviceRegistryBuilderSupplier,List standardServiceRegistryBuilderConfigurers,JpaConfiguration jpaConfiguration,ApplicationContext applicationContext,Integrator integrator) --> new ValidatorFactoryConfigurer([ValidatorFactory validatorFactory])
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [io.micronaut.configuration.hibernate.jpa.conf.sessionfactory.configure.internal.ValidatorFactoryConfigurer]
Steps To Reproduce
- Create a Micronaut Data + Hibernate JPA project using Micronaut 4.3.1: 
mn create-app -b gradle -l groovy -t spock --features=h2,jdbc-tomcat,data-jpa,hibernate-jpa,hibernate-validator mn-hibernate-playground. - Run the app: 
./gradlew run. - The app fails to start.
 
Environment Information
- Ubuntu 22.04
 - Java 17
 
Example Application
No response
Version
4.3.1
Sorry, but the error seems to keep happening in Micronaut 4.3.2 (same steps to reproduce).
A workaround to force the usage of the Micronaut hibernate validator ConstraintValidatorFactory is to create such as class:
package mn.hibernate.playground;
import io.micronaut.configuration.hibernate.validator.DefaultConstraintValidatorFactory;
import io.micronaut.context.BeanContext;
import io.micronaut.context.annotation.Replaces;
import jakarta.inject.Singleton;
import jakarta.validation.ConstraintValidatorFactory;
@Replaces(ConstraintValidatorFactory.class)
@Singleton
public class DefaultConstraintValidatorFactoryReplacement extends DefaultConstraintValidatorFactory {
    public DefaultConstraintValidatorFactoryReplacement(BeanContext beanContext) {
        super(beanContext);
    }
}
                                    
                                    
                                    
                                
Micronaut Framework BOM 4.3.3 will include Micronaut hibernate validator 4.2.1. We will release it by the end of the week.
However, you can force it now:
configurations.all {
    resolutionStrategy {
        force "io.micronaut.beanvalidation:micronaut-hibernate-validator:4.2.1"
    }
}
If in a terminal running Micronaut CLI 4.3.2, I run
mn create-app -b gradle -l groovy -t spock --features=h2,jdbc-tomcat,data-jpa,hibernate-jpa,hibernate-validator mn-hibernate-playground.
then I force the micronaut-hibernate-validator to 4.2.1 with the above snippet.
I add a class such as:
package entities;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Book {
    @Id
    private Long id;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}
and modify the JPA configuration to scan for entities with:
jpa.default.entity-scan.packages=entities
I can run ./gradle run