Skip to content

Commit 34184a1

Browse files
committed
HHH-19232 Also listen to collection update events for bean validation
1 parent 3f8b3f9 commit 34184a1

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/BeanValidationEventListener.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
1515
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
1616
import org.hibernate.engine.spi.SessionFactoryImplementor;
17+
import org.hibernate.event.spi.PreCollectionUpdateEvent;
18+
import org.hibernate.event.spi.PreCollectionUpdateEventListener;
1719
import org.hibernate.event.spi.PreDeleteEvent;
1820
import org.hibernate.event.spi.PreDeleteEventListener;
1921
import org.hibernate.event.spi.PreInsertEvent;
@@ -36,6 +38,8 @@
3638
import jakarta.validation.Validator;
3739
import jakarta.validation.ValidatorFactory;
3840

41+
import static org.hibernate.internal.util.NullnessUtil.castNonNull;
42+
3943
/**
4044
* Event listener used to enable Bean Validation for insert/update/delete events.
4145
*
@@ -44,7 +48,7 @@
4448
*/
4549
//FIXME review exception model
4650
public class BeanValidationEventListener
47-
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener {
51+
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener, PreCollectionUpdateEventListener {
4852

4953
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
5054
CoreMessageLogger.class,
@@ -121,6 +125,17 @@ public boolean onPreUpsert(PreUpsertEvent event) {
121125
return false;
122126
}
123127

128+
@Override
129+
public void onPreUpdateCollection(PreCollectionUpdateEvent event) {
130+
final Object entity = castNonNull( event.getCollection().getOwner() );
131+
validate(
132+
entity,
133+
event.getSession().getEntityPersister( event.getAffectedOwnerEntityName(), entity ),
134+
event.getFactory(),
135+
GroupsPerOperation.Operation.UPDATE
136+
);
137+
}
138+
124139
private <T> void validate(
125140
T object,
126141
EntityPersister persister,

hibernate-core/src/main/java/org/hibernate/boot/beanvalidation/TypeSafeActivator.java

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public static void applyCallbackListeners(ValidatorFactory validatorFactory, Act
126126
listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener );
127127
listenerRegistry.appendListeners( EventType.PRE_DELETE, listener );
128128
listenerRegistry.appendListeners( EventType.PRE_UPSERT, listener );
129+
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_UPDATE, listener );
129130

130131
listener.initialize( cfgService.getSettings(), classLoaderService );
131132
}

0 commit comments

Comments
 (0)