Skip to content

Commit

Permalink
HHH-19232 Also listen to collection update events for bean validation
Browse files Browse the repository at this point in the history
  • Loading branch information
mbladel committed Mar 7, 2025
1 parent 3f8b3f9 commit 34184a1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.event.spi.PreCollectionUpdateEvent;
import org.hibernate.event.spi.PreCollectionUpdateEventListener;
import org.hibernate.event.spi.PreDeleteEvent;
import org.hibernate.event.spi.PreDeleteEventListener;
import org.hibernate.event.spi.PreInsertEvent;
Expand All @@ -36,6 +38,8 @@
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;

import static org.hibernate.internal.util.NullnessUtil.castNonNull;

/**
* Event listener used to enable Bean Validation for insert/update/delete events.
*
Expand All @@ -44,7 +48,7 @@
*/
//FIXME review exception model
public class BeanValidationEventListener
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener {
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener, PreCollectionUpdateEventListener {

private static final CoreMessageLogger LOG = Logger.getMessageLogger(
CoreMessageLogger.class,
Expand Down Expand Up @@ -121,6 +125,17 @@ public boolean onPreUpsert(PreUpsertEvent event) {
return false;
}

@Override
public void onPreUpdateCollection(PreCollectionUpdateEvent event) {
final Object entity = castNonNull( event.getCollection().getOwner() );
validate(
entity,
event.getSession().getEntityPersister( event.getAffectedOwnerEntityName(), entity ),
event.getFactory(),
GroupsPerOperation.Operation.UPDATE
);
}

private <T> void validate(
T object,
EntityPersister persister,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ public static void applyCallbackListeners(ValidatorFactory validatorFactory, Act
listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener );
listenerRegistry.appendListeners( EventType.PRE_DELETE, listener );
listenerRegistry.appendListeners( EventType.PRE_UPSERT, listener );
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_UPDATE, listener );

listener.initialize( cfgService.getSettings(), classLoaderService );
}
Expand Down

0 comments on commit 34184a1

Please sign in to comment.