|
13 | 13 | import org.hibernate.boot.internal.ClassLoaderAccessImpl; |
14 | 14 | import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; |
15 | 15 | import org.hibernate.engine.spi.SessionFactoryImplementor; |
| 16 | +import org.hibernate.event.spi.PreCollectionUpdateEvent; |
| 17 | +import org.hibernate.event.spi.PreCollectionUpdateEventListener; |
16 | 18 | import org.hibernate.event.spi.PreDeleteEvent; |
17 | 19 | import org.hibernate.event.spi.PreDeleteEventListener; |
18 | 20 | import org.hibernate.event.spi.PreInsertEvent; |
|
34 | 36 | import jakarta.validation.ValidatorFactory; |
35 | 37 |
|
36 | 38 | import static jakarta.validation.Validation.buildDefaultValidatorFactory; |
| 39 | +import static org.hibernate.internal.util.NullnessUtil.castNonNull; |
37 | 40 | import static org.hibernate.internal.util.collections.CollectionHelper.setOfSize; |
38 | 41 |
|
39 | 42 | /** |
|
44 | 47 | */ |
45 | 48 | //FIXME review exception model |
46 | 49 | public class BeanValidationEventListener |
47 | | - implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener { |
| 50 | + implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener, PreCollectionUpdateEventListener { |
48 | 51 |
|
49 | 52 | private static final CoreMessageLogger LOG = Logger.getMessageLogger( |
50 | 53 | MethodHandles.lookup(), |
@@ -121,6 +124,17 @@ public boolean onPreUpsert(PreUpsertEvent event) { |
121 | 124 | return false; |
122 | 125 | } |
123 | 126 |
|
| 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 | + |
124 | 138 | private <T> void validate( |
125 | 139 | T object, |
126 | 140 | EntityPersister persister, |
|
0 commit comments