Skip to content

Commit 9a4d21d

Browse files
committed
HHH-17955 Bean Validation and @PostXxxx callbacks for StatelessSession
Signed-off-by: Gavin King <gavin@hibernate.org>
1 parent 59603df commit 9a4d21d

File tree

41 files changed

+730
-177
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+730
-177
lines changed

hibernate-core/src/main/java/org/hibernate/action/internal/EntityInsertAction.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,18 +239,19 @@ private void postCommitOnFailure(PostInsertEventListener listener, PostInsertEve
239239
}
240240

241241
protected boolean preInsert() {
242-
boolean veto = false;
243-
244242
final EventListenerGroup<PreInsertEventListener> listenerGroup
245243
= getFastSessionServices().eventListenerGroup_PRE_INSERT;
246244
if ( listenerGroup.isEmpty() ) {
247-
return veto;
245+
return false;
248246
}
249-
final PreInsertEvent event = new PreInsertEvent( getInstance(), getId(), getState(), getPersister(), eventSource() );
250-
for ( PreInsertEventListener listener : listenerGroup.listeners() ) {
251-
veto |= listener.onPreInsert( event );
247+
else {
248+
boolean veto = false;
249+
final PreInsertEvent event = new PreInsertEvent( getInstance(), getId(), getState(), getPersister(), eventSource() );
250+
for ( PreInsertEventListener listener : listenerGroup.listeners() ) {
251+
veto |= listener.onPreInsert( event );
252+
}
253+
return veto;
252254
}
253-
return veto;
254255
}
255256

256257
@Override

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.hibernate.event.spi.PreInsertEventListener;
2121
import org.hibernate.event.spi.PreUpdateEvent;
2222
import org.hibernate.event.spi.PreUpdateEventListener;
23+
import org.hibernate.event.spi.PreUpsertEvent;
24+
import org.hibernate.event.spi.PreUpsertEventListener;
2325
import org.hibernate.internal.CoreMessageLogger;
2426
import org.hibernate.internal.util.collections.CollectionHelper;
2527
import org.hibernate.metamodel.RepresentationMode;
@@ -42,7 +44,7 @@
4244
*/
4345
//FIXME review exception model
4446
public class BeanValidationEventListener
45-
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener {
47+
implements PreInsertEventListener, PreUpdateEventListener, PreDeleteEventListener, PreUpsertEventListener {
4648

4749
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
4850
CoreMessageLogger.class,
@@ -60,7 +62,8 @@ public class BeanValidationEventListener
6062
* @param factory The {@code ValidatorFactory} to use to create {@code Validator} instance(s)
6163
* @param settings Configured properties
6264
*/
63-
public BeanValidationEventListener(ValidatorFactory factory, Map<String,Object> settings, ClassLoaderService classLoaderService) {
65+
public BeanValidationEventListener(
66+
ValidatorFactory factory, Map<String,Object> settings, ClassLoaderService classLoaderService) {
6467
init( factory, settings, classLoaderService );
6568
}
6669

@@ -80,9 +83,8 @@ private void init(ValidatorFactory factory, Map<String,Object> settings, ClassLo
8083
public boolean onPreInsert(PreInsertEvent event) {
8184
validate(
8285
event.getEntity(),
83-
event.getPersister().getRepresentationStrategy().getMode(),
8486
event.getPersister(),
85-
event.getSession().getFactory(),
87+
event.getFactory(),
8688
GroupsPerOperation.Operation.INSERT
8789
);
8890
return false;
@@ -91,9 +93,8 @@ public boolean onPreInsert(PreInsertEvent event) {
9193
public boolean onPreUpdate(PreUpdateEvent event) {
9294
validate(
9395
event.getEntity(),
94-
event.getPersister().getRepresentationStrategy().getMode(),
9596
event.getPersister(),
96-
event.getSession().getFactory(),
97+
event.getFactory(),
9798
GroupsPerOperation.Operation.UPDATE
9899
);
99100
return false;
@@ -102,21 +103,30 @@ public boolean onPreUpdate(PreUpdateEvent event) {
102103
public boolean onPreDelete(PreDeleteEvent event) {
103104
validate(
104105
event.getEntity(),
105-
event.getPersister().getRepresentationStrategy().getMode(),
106106
event.getPersister(),
107-
event.getSession().getFactory(),
107+
event.getFactory(),
108108
GroupsPerOperation.Operation.DELETE
109109
);
110110
return false;
111111
}
112112

113+
@Override
114+
public boolean onPreUpsert(PreUpsertEvent event) {
115+
validate(
116+
event.getEntity(),
117+
event.getPersister(),
118+
event.getFactory(),
119+
GroupsPerOperation.Operation.UPSERT
120+
);
121+
return false;
122+
}
123+
113124
private <T> void validate(
114125
T object,
115-
RepresentationMode mode,
116126
EntityPersister persister,
117127
SessionFactoryImplementor sessionFactory,
118128
GroupsPerOperation.Operation operation) {
119-
if ( object == null || mode != RepresentationMode.POJO ) {
129+
if ( object == null || persister.getRepresentationStrategy().getMode() != RepresentationMode.POJO ) {
120130
return;
121131
}
122132
TraversableResolver tr = new HibernateTraversableResolver( persister, associationsPerEntityPersister, sessionFactory );

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public static GroupsPerOperation from(Map settings, ClassLoaderAccess classLoade
3939
applyOperationGrouping( groupsPerOperation, Operation.INSERT, settings, classLoaderAccess );
4040
applyOperationGrouping( groupsPerOperation, Operation.UPDATE, settings, classLoaderAccess );
4141
applyOperationGrouping( groupsPerOperation, Operation.DELETE, settings, classLoaderAccess );
42+
applyOperationGrouping( groupsPerOperation, Operation.UPSERT, settings, classLoaderAccess );
4243
applyOperationGrouping( groupsPerOperation, Operation.DDL, settings, classLoaderAccess );
4344

4445
return groupsPerOperation;
@@ -99,10 +100,11 @@ public Class<?>[] get(Operation operation) {
99100
return groupsPerOperation.get( operation );
100101
}
101102

102-
public static enum Operation {
103+
public enum Operation {
103104
INSERT( "persist", JPA_GROUP_PREFIX + "pre-persist", JAKARTA_JPA_GROUP_PREFIX + "pre-persist" ),
104105
UPDATE( "update", JPA_GROUP_PREFIX + "pre-update", JAKARTA_JPA_GROUP_PREFIX + "pre-update" ),
105106
DELETE( "remove", JPA_GROUP_PREFIX + "pre-remove", JAKARTA_JPA_GROUP_PREFIX + "pre-remove" ),
107+
UPSERT( "upsert", JPA_GROUP_PREFIX + "pre-upsert", JAKARTA_JPA_GROUP_PREFIX + "pre-upsert" ),
106108
DDL( "ddl", HIBERNATE_GROUP_PREFIX + "ddl", HIBERNATE_GROUP_PREFIX + "ddl" );
107109

108110

0 commit comments

Comments
 (0)