Skip to content

Commit 0b1b1ed

Browse files
committed
HHH-19232 Also listen to collection update events for bean validation
1 parent dcabd7f commit 0b1b1ed

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
1414
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
1515
import org.hibernate.engine.spi.SessionFactoryImplementor;
16+
import org.hibernate.event.spi.PreCollectionUpdateEvent;
17+
import org.hibernate.event.spi.PreCollectionUpdateEventListener;
1618
import org.hibernate.event.spi.PreDeleteEvent;
1719
import org.hibernate.event.spi.PreDeleteEventListener;
1820
import org.hibernate.event.spi.PreInsertEvent;
@@ -34,6 +36,7 @@
3436
import jakarta.validation.ValidatorFactory;
3537

3638
import static jakarta.validation.Validation.buildDefaultValidatorFactory;
39+
import static org.hibernate.internal.util.NullnessUtil.castNonNull;
3740
import static org.hibernate.internal.util.collections.CollectionHelper.setOfSize;
3841

3942
/**
@@ -44,7 +47,7 @@
4447
*/
4548
//FIXME review exception model
4649
public class BeanValidationEventListener
47-
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener {
50+
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener, PreCollectionUpdateEventListener {
4851

4952
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
5053
MethodHandles.lookup(),
@@ -121,6 +124,17 @@ public boolean onPreUpsert(PreUpsertEvent event) {
121124
return false;
122125
}
123126

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

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ private static void setupListener(ValidatorFactory validatorFactory, SessionFact
152152
listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener );
153153
listenerRegistry.appendListeners( EventType.PRE_DELETE, listener );
154154
listenerRegistry.appendListeners( EventType.PRE_UPSERT, listener );
155+
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_UPDATE, listener );
155156
listener.initialize( cfgService.getSettings(), classLoaderService );
156157
}
157158

0 commit comments

Comments
 (0)