From cd9df398fd07a719dac4625329ba964491112270 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Wed, 3 Dec 2025 10:16:40 +0100 Subject: [PATCH] minor cleanups to BeanValidationEventListener --- .../BeanValidationEventListener.java | 76 +++++++++++-------- .../beanvalidation/TypeSafeActivator.java | 10 +-- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationEventListener.java b/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationEventListener.java index 42735bf68f4d..79b845e300a3 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationEventListener.java @@ -54,20 +54,24 @@ public class BeanValidationEventListener private SessionFactoryImplementor sessionFactory; - public BeanValidationEventListener(ValidatorFactory factory, Map settings, ClassLoaderService classLoaderService) { + public BeanValidationEventListener( + ValidatorFactory factory, Map settings, ClassLoaderService classLoaderService) { traversableResolver = new HibernateTraversableResolver(); validator = factory.usingContext() .traversableResolver( traversableResolver ) .getValidator(); - groupsPerOperation = GroupsPerOperation.from( settings, new ClassLoaderAccessImpl( classLoaderService ) ); + groupsPerOperation = + GroupsPerOperation.from( settings, + new ClassLoaderAccessImpl( classLoaderService ) ); } @Override public void sessionFactoryCreated(SessionFactory factory) { sessionFactory = factory.unwrap( SessionFactoryImplementor.class ); sessionFactory.getMappingMetamodel() - .forEachEntityDescriptor( entityPersister -> traversableResolver.addPersister( entityPersister, sessionFactory ) ); + .forEachEntityDescriptor( entityPersister -> + traversableResolver.addPersister( entityPersister, sessionFactory ) ); } public boolean onPreInsert(PreInsertEvent event) { @@ -117,58 +121,64 @@ public void onPreUpdateCollection(PreCollectionUpdateEvent event) { ); } - private EntityPersister getEntityPersister(SharedSessionContractImplementor session, String entityName, Object entity) { + private EntityPersister getEntityPersister( + SharedSessionContractImplementor session, String entityName, Object entity) { if ( session != null ) { return session.getEntityPersister( entityName, entity ); } - return entityName == null - ? sessionFactory.getMappingMetamodel().getEntityDescriptor( entity.getClass().getName() ) - : sessionFactory.getMappingMetamodel().getEntityDescriptor( entityName ) - .getSubclassEntityPersister( entity, sessionFactory ); + else { + final var metamodel = sessionFactory.getMappingMetamodel(); + return entityName == null + ? metamodel.getEntityDescriptor( entity.getClass().getName() ) + : metamodel.getEntityDescriptor( entityName ) + .getSubclassEntityPersister( entity, sessionFactory ); + } } - private void validate( - T object, - EntityPersister persister, - GroupsPerOperation.Operation operation) { + private void validate(T object, EntityPersister persister, GroupsPerOperation.Operation operation) { if ( object != null && persister.getRepresentationStrategy().getMode() == RepresentationMode.POJO ) { - final Class[] groups = groupsPerOperation.get( operation ); + final var groups = groupsPerOperation.get( operation ); if ( groups.length > 0 ) { final var constraintViolations = validator.validate( object, groups ); if ( !constraintViolations.isEmpty() ) { - final Set> propagatedViolations = setOfSize( constraintViolations.size() ); + final Set> propagatedViolations = + setOfSize( constraintViolations.size() ); final Set classNames = new HashSet<>(); for ( var violation : constraintViolations ) { BEAN_VALIDATION_LOGGER.trace( violation ); propagatedViolations.add( violation ); classNames.add( violation.getLeafBean().getClass().getName() ); } - final var builder = - new StringBuilder() - .append( "Validation failed for classes " ) - .append( classNames ) - .append( " during " ) - .append( operation.getName() ) - .append( " time for groups " ) - .append( toString( groups ) ) - .append( "\nList of constraint violations:[\n" ); - for ( var violation : constraintViolations ) { - builder.append( "\t" ).append( violation.toString() ).append( "\n" ); - } - builder.append( "]" ); - throw new ConstraintViolationException( builder.toString(), propagatedViolations ); + throw new ConstraintViolationException( + message( operation, classNames, groups, constraintViolations ), + propagatedViolations ); } } } } - private String toString(Class[] groups) { - final var string = new StringBuilder( "[" ); + private String message( + GroupsPerOperation.Operation operation, + Set classNames, + Class[] groups, + Set> constraintViolations) { + final var builder = new StringBuilder(); + builder.append( "Validation failed for classes " ) + .append( classNames ) + .append( " during " ) + .append( operation.getName() ) + .append( " time for groups [" ); for ( var group : groups ) { - string.append( group.getName() ).append( ", " ); + builder.append( group.getName() ).append( ", " ); + } + builder.append( "]\nList of constraint violations:[\n" ); + for ( var violation : constraintViolations ) { + builder.append( "\t" ) + .append( violation.toString() ) + .append( "\n" ); } - string.append( "]" ); - return string.toString(); + builder.append( "]" ); + return builder.toString(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/TypeSafeActivator.java b/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/TypeSafeActivator.java index 674181d97bee..a646171ed9d1 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/TypeSafeActivator.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/TypeSafeActivator.java @@ -106,7 +106,6 @@ else if ( validationModes.contains( ValidationMode.DDL ) ) { // There is a Jakarta Validation provider, but it failed to bootstrap the factory for some reason, // we should fail and let the user deal with it: throw exception; - } } } @@ -148,10 +147,10 @@ private static void setupListener( ValidatorFactory validatorFactory, SessionFactoryServiceRegistry serviceRegistry, SessionFactoryImplementor sessionFactory) { - final var classLoaderService = serviceRegistry.requireService( ClassLoaderService.class ); - final var cfgService = serviceRegistry.requireService( ConfigurationService.class ); final var listener = - new BeanValidationEventListener( validatorFactory, cfgService.getSettings(), classLoaderService ); + new BeanValidationEventListener( validatorFactory, + serviceRegistry.requireService( ConfigurationService.class ).getSettings(), + serviceRegistry.requireService( ClassLoaderService.class ) ); final var listenerRegistry = sessionFactory.getEventListenerRegistry(); listenerRegistry.addDuplicationStrategy( DuplicationStrategyImpl.INSTANCE ); listenerRegistry.appendListeners( EventType.PRE_INSERT, listener ); @@ -183,7 +182,8 @@ private static void applyRelationalConstraints(ValidatorFactory factory, Activat context.getMetadata().getEntityBindings(), serviceRegistry.requireService( ConfigurationService.class ).getSettings(), serviceRegistry.requireService( JdbcServices.class ).getDialect(), - new ClassLoaderAccessImpl( null, serviceRegistry.getService( ClassLoaderService.class ) ) + new ClassLoaderAccessImpl( null, + serviceRegistry.getService( ClassLoaderService.class ) ) ); } }