Skip to content

Commit 763401a

Browse files
committed
clean up the internal DefaultVisitor hierarchy
by removing two obsolete abstract superclasses Signed-off-by: Gavin King <[email protected]>
1 parent 9c75adc commit 763401a

File tree

7 files changed

+76
-139
lines changed

7 files changed

+76
-139
lines changed

hibernate-core/src/main/java/org/hibernate/event/internal/AbstractLockUpgradeEventListener.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

hibernate-core/src/main/java/org/hibernate/event/internal/AbstractReassociateEventListener.java

Lines changed: 0 additions & 90 deletions
This file was deleted.

hibernate-core/src/main/java/org/hibernate/event/internal/AbstractSaveEventListener.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@
5050
*
5151
* @author Steve Ebersole.
5252
*/
53-
public abstract class AbstractSaveEventListener<C>
54-
extends AbstractReassociateEventListener
55-
implements CallbackRegistryConsumer {
53+
public abstract class AbstractSaveEventListener<C> implements CallbackRegistryConsumer {
5654
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( AbstractSaveEventListener.class );
5755

5856
private CallbackRegistry callbackRegistry;

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLockEventListener.java

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,33 @@
1414
import org.hibernate.engine.internal.ForeignKeys;
1515
import org.hibernate.engine.spi.CascadingActions;
1616
import org.hibernate.engine.spi.EntityEntry;
17+
import org.hibernate.engine.spi.EntityKey;
1718
import org.hibernate.engine.spi.PersistenceContext;
1819
import org.hibernate.engine.spi.SessionImplementor;
20+
import org.hibernate.engine.spi.Status;
21+
import org.hibernate.event.spi.AbstractEvent;
1922
import org.hibernate.event.spi.EventSource;
2023
import org.hibernate.event.spi.LockEvent;
2124
import org.hibernate.event.spi.LockEventListener;
2225
import org.hibernate.internal.CoreMessageLogger;
2326
import org.hibernate.persister.entity.EntityPersister;
2427

28+
import org.hibernate.type.TypeHelper;
2529
import org.jboss.logging.Logger;
2630

2731
import java.lang.invoke.MethodHandles;
2832

33+
import static org.hibernate.engine.internal.Versioning.getVersion;
34+
import static org.hibernate.loader.ast.internal.LoaderHelper.upgradeLock;
35+
import static org.hibernate.pretty.MessageHelper.infoString;
36+
2937
/**
3038
* Defines the default lock event listeners used by hibernate to lock entities
3139
* in response to generated lock events.
3240
*
3341
* @author Steve Ebersole
3442
*/
35-
public class DefaultLockEventListener extends AbstractLockUpgradeEventListener implements LockEventListener {
43+
public class DefaultLockEventListener implements LockEventListener {
3644

3745
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
3846
MethodHandles.lookup(),
@@ -100,4 +108,58 @@ private void cascadeOnLock(LockEvent event, EntityPersister persister, Object en
100108
}
101109
}
102110

111+
/**
112+
* Associates a given entity (either transient or associated with another session)
113+
* to the given session.
114+
*
115+
* @param event The event triggering the re-association
116+
* @param object The entity to be associated
117+
* @param id The id of the entity.
118+
* @param persister The entity's persister instance.
119+
*
120+
* @return An EntityEntry representing the entity within this session.
121+
*/
122+
protected final EntityEntry reassociate(AbstractEvent event, Object object, Object id, EntityPersister persister) {
123+
124+
if ( LOG.isTraceEnabled() ) {
125+
LOG.tracev(
126+
"Reassociating transient instance: {0}",
127+
infoString( persister, id, event.getFactory() )
128+
);
129+
}
130+
131+
final EventSource source = event.getSession();
132+
final EntityKey key = source.generateEntityKey( id, persister );
133+
final PersistenceContext persistenceContext = source.getPersistenceContext();
134+
135+
persistenceContext.checkUniqueness( key, object );
136+
137+
//get a snapshot
138+
final Object[] values = persister.getValues( object );
139+
TypeHelper.deepCopy(
140+
values,
141+
persister.getPropertyTypes(),
142+
persister.getPropertyUpdateability(),
143+
values,
144+
source
145+
);
146+
147+
final EntityEntry newEntry = persistenceContext.addEntity(
148+
object,
149+
persister.isMutable() ? Status.MANAGED : Status.READ_ONLY,
150+
values,
151+
key,
152+
getVersion( values, persister ),
153+
LockMode.NONE,
154+
true,
155+
persister,
156+
false
157+
);
158+
159+
new OnLockVisitor( source, id, object ).process( object, persister );
160+
161+
persister.afterReassociate( object, source );
162+
163+
return newEntry;
164+
}
103165
}

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,7 @@ public void onMerge(MergeEvent event, MergeContext copiedAlready) throws Hiberna
124124
else if ( isPersistentAttributeInterceptable( original ) ) {
125125
final PersistentAttributeInterceptor interceptor =
126126
asPersistentAttributeInterceptable( original ).$$_hibernate_getInterceptor();
127-
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) {
128-
final EnhancementAsProxyLazinessInterceptor proxyInterceptor =
129-
(EnhancementAsProxyLazinessInterceptor) interceptor;
127+
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor proxyInterceptor ) {
130128
LOG.trace( "Ignoring uninitialized enhanced-proxy" );
131129
event.setResult( source.load( proxyInterceptor.getEntityName(), proxyInterceptor.getIdentifier() ) );
132130
}
@@ -350,15 +348,14 @@ private static class CollectionVisitor extends WrapVisitor {
350348
}
351349
@Override
352350
protected Object processCollection(Object collection, CollectionType collectionType) {
353-
if ( collection instanceof PersistentCollection ) {
354-
final PersistentCollection<?> coll = (PersistentCollection<?>) collection;
351+
if ( collection instanceof PersistentCollection<?> persistentCollection ) {
355352
final CollectionPersister persister =
356353
getSession().getFactory().getMappingMetamodel()
357354
.getCollectionDescriptor( collectionType.getRole() );
358355
final CollectionEntry collectionEntry =
359-
getSession().getPersistenceContextInternal().getCollectionEntry( coll );
360-
if ( !coll.equalsSnapshot( persister ) ) {
361-
collectionEntry.resetStoredSnapshot( coll, coll.getSnapshot( persister ) );
356+
getSession().getPersistenceContextInternal().getCollectionEntry( persistentCollection );
357+
if ( !persistentCollection.equalsSnapshot( persister ) ) {
358+
collectionEntry.resetStoredSnapshot( persistentCollection, persistentCollection.getSnapshot( persister ) );
362359
}
363360
}
364361
return null;

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultResolveNaturalIdEventListener.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
* @author Eric Dalquist
2828
* @author Steve Ebersole
2929
*/
30-
public class DefaultResolveNaturalIdEventListener
31-
extends AbstractLockUpgradeEventListener
32-
implements ResolveNaturalIdEventListener {
30+
public class DefaultResolveNaturalIdEventListener implements ResolveNaturalIdEventListener {
3331

3432
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( DefaultResolveNaturalIdEventListener.class );
3533

hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ public class LoaderHelper {
4646
/**
4747
* Ensure the {@linkplain LockMode} associated with the entity in relation to a
4848
* persistence context is {@linkplain LockMode#greaterThan great or equal} to the
49-
* requested mode.
49+
* requested mode, performing a pessimistic lock upgrade on a given entity, if needed.
50+
*
51+
* @param object The entity for which to upgrade the lock.
52+
* @param entry The entity's {@link EntityEntry} instance.
53+
* @param lockOptions Contains the requested lock mode.
54+
* @param session The session which is the source of the event being processed.
5055
*/
5156
public static void upgradeLock(Object object, EntityEntry entry, LockOptions lockOptions, EventSource session) {
5257
final LockMode requestedLockMode = lockOptions.getLockMode();

0 commit comments

Comments
 (0)