hibernate/hibernate-orm · error · HibernateException
Unable to load TypeSafeActivator class
Error message
Unable to load TypeSafeActivator class
What it means
The Bean Validation API was detectable, but ClassLoaderService.classForName for the internal TypeSafeActivator failed and was wrapped in this HibernateException. Typically the API is only partially present — some jakarta.validation classes are missing — so loading the activator class, which statically references ValidatorFactory, dies inside the classloader.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationIntegrator.java:189
*
* @param modes The requested validation modes.
*/
private void validateMissingBeanValidationApi(Set<ValidationMode> modes, ValidationConstraintDdlInfluence constraintInfluence) {
if ( modes.contains( ValidationMode.CALLBACK ) ) {
throw new IntegrationException( "Jakarta Validation API was not available, but 'callback' validation was requested" );
}
if ( constraintInfluence == ValidationConstraintDdlInfluence.REQUIRED ) {
throw new IntegrationException( "Bean Validation API was not available, but '"
+ SchemaToolingSettings.APPLY_VALIDATION_CONSTRAINTS + "' was set to 'REQUIRED'" );
}
}
private Class<?> loadTypeSafeActivatorClass(ClassLoaderService classLoaderService) {
try {
return classLoaderService.classForName( ACTIVATOR_CLASS_NAME );
}
catch (Exception e) {
throw new HibernateException( "Unable to load TypeSafeActivator class", e );
}
}
private record ActivationContextImpl(
Set<ValidationMode> modes,
ValidationConstraintDdlInfluence constraintInfluence,
Metadata metadata,
SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry)
implements ActivationContext {
@Override
public Set<ValidationMode> getValidationModes() {
return modes;
}
@Override
public Metadata getMetadata() {View on GitHub (pinned to fad1729dce)
Solutions
- Replace partial/overlapping validation jars with the exact jakarta.validation-api version your hibernate-core release requires
- Find and remove duplicate or split packages spanning javax and jakarta artifacts
- If validation was never intended, set validation mode NONE before the SessionFactory is built
Defensive patterns
Strategy: validation
Validate before calling
// verify the validation API is complete, not just present
static void assertValidationApiComplete() {
for (String cn : new String[] {
"jakarta.validation.Validation",
"jakarta.validation.ValidatorFactory",
"jakarta.validation.ConstraintViolation"}) {
try { Class.forName(cn); }
catch (ClassNotFoundException e) {
throw new IllegalStateException("Incomplete/partial jakarta.validation API on classpath", e);
}
}
} Try / catch
try {
sessionFactory = new Configuration().buildSessionFactory();
} catch (HibernateException e) {
if (e.getMessage().contains("Unable to load TypeSafeActivator class"))
throw new IllegalStateException("Partial validation API detected; replace with the exact matching jar", e);
throw e;
} Prevention
- Use exactly the validation-api artifact version your Hibernate documents
- Avoid shading/minimization that can split validation packages
When it happens
Trigger: A classpath that contains jakarta.validation artifacts only partially (split packages across javax and jakarta jars, partial shading, an API jar of a different minor version than hibernate-core links against) while validation integration is being activated.
Common situations: Shaded/fat jars including only part of the API; ProGuard/minimization stripping 'unused' classes; mixed javax.validation:validation-api 2.x alongside jakarta.validation-api 3.x.
Related errors
- Jakarta Validation API was not available, but 'callback' val
- Bean Validation API was not available, but 'hibernate.toolin
- Unable to load class {}
- Multiple active MetadataBuilder definitions were discovered
- Unable to determine JAR Url from <url>. Cause: <cause>
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/cbd74b57586351d4.
Report an issue: GitHub.