Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,13 @@ public final void beforeExecutions() throws CacheException {
// the database. This action is responsible for second-level cache invalidation only.
if ( persister.hasCache() ) {
final var cache = persister.getCacheAccessStrategy();
final Object ck = cache.generateCacheKey(
final Object cacheKey = cache.generateCacheKey(
key,
persister,
session.getFactory(),
session.getTenantIdentifier()
);
final SoftLock lock = cache.lockItem( session, ck, null );
final SoftLock lock = cache.lockItem( session, cacheKey, null );
// the old behavior used key as opposed to getKey()
afterTransactionProcess = new CacheCleanupProcess( key, persister, lock );
}
Expand Down Expand Up @@ -129,13 +129,13 @@ protected final EventSource getSession() {
protected final void evict() throws CacheException {
if ( persister.hasCache() ) {
final var cache = persister.getCacheAccessStrategy();
final Object ck = cache.generateCacheKey(
final Object cacheKey = cache.generateCacheKey(
key,
persister,
session.getFactory(),
session.getTenantIdentifier()
);
cache.remove( session, ck);
cache.remove( session, cacheKey);
}
}

Expand Down Expand Up @@ -170,13 +170,13 @@ private CacheCleanupProcess(Object key, CollectionPersister persister, SoftLock
@Override
public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) {
final var cache = persister.getCacheAccessStrategy();
final Object ck = cache.generateCacheKey(
final Object cacheKey = cache.generateCacheKey(
key,
persister,
session.getFactory(),
session.getTenantIdentifier()
);
cache.unlockItem( session, ck, lock );
cache.unlockItem( session, cacheKey, lock );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.hibernate.AssertionFailure;
import org.hibernate.HibernateException;
import org.hibernate.cache.spi.access.SoftLock;
import org.hibernate.engine.spi.PersistenceContext;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.event.spi.EventSource;
import org.hibernate.event.spi.PostCommitDeleteEventListener;
Expand Down Expand Up @@ -106,9 +107,9 @@ public void execute() throws HibernateException {

final boolean veto = isInstanceLoaded() && preDelete();

handleNaturalIdResolutions( persister, session );
handleNaturalIdLocalResolutions( persister, session.getPersistenceContextInternal() );

final Object ck = lockCacheItem();
final Object cacheKey = lockCacheItem();

if ( !isCascadeDeleteEnabled && !veto ) {
final var eventMonitor = session.getEventMonitor();
Expand All @@ -124,11 +125,11 @@ public void execute() throws HibernateException {
}

if ( isInstanceLoaded() ) {
postDeleteLoaded( id, persister, session, instance, ck );
postDeleteLoaded( id, persister, session, instance, cacheKey );
}
else {
// we're deleting an unloaded proxy
postDeleteUnloaded( id, persister, session, ck );
postDeleteUnloaded( id, persister, session, cacheKey );
}

final var statistics = session.getFactory().getStatistics();
Expand All @@ -137,10 +138,10 @@ public void execute() throws HibernateException {
}
}

private void handleNaturalIdResolutions(EntityPersister persister, EventSource session) {
private void handleNaturalIdLocalResolutions(EntityPersister persister, PersistenceContext context) {
final var naturalIdMapping = persister.getNaturalIdMapping();
if ( naturalIdMapping != null ) {
naturalIdValues = session.getPersistenceContextInternal().getNaturalIdResolutions()
naturalIdValues = context.getNaturalIdResolutions()
.removeLocalResolution(
getId(),
naturalIdMapping.extractNaturalIdFromEntityState( state ),
Expand All @@ -166,7 +167,7 @@ protected void postDeleteLoaded(
EntityPersister persister,
SharedSessionContractImplementor session,
Object instance,
Object ck) {
Object cacheKey) {
// After actually deleting a row, record the fact that the instance no longer
// exists on the database (needed for identity-column key generation), and
// remove it from the session cache
Expand All @@ -178,20 +179,24 @@ protected void postDeleteLoaded(
entry.postDelete();
final var key = entry.getEntityKey();
persistenceContext.removeEntityHolder( key );
removeCacheItem( ck );
removeCacheItem( cacheKey );
persistenceContext.getNaturalIdResolutions()
.removeSharedResolution( id, naturalIdValues, persister, true );
postDelete();
}

protected void postDeleteUnloaded(Object id, EntityPersister persister, SharedSessionContractImplementor session, Object ck) {
protected void postDeleteUnloaded(
Object id,
EntityPersister persister,
SharedSessionContractImplementor session,
Object cacheKey) {
final var persistenceContext = session.getPersistenceContextInternal();
final var key = session.generateEntityKey( id, persister );
if ( !persistenceContext.containsDeletedUnloadedEntityKey( key ) ) {
throw new AssertionFailure( "deleted proxy should be for an unloaded entity: " + key );
}
persistenceContext.removeProxy( key );
removeCacheItem( ck );
removeCacheItem( cacheKey );
}

protected boolean preDelete() {
Expand Down Expand Up @@ -260,14 +265,14 @@ protected Object lockCacheItem() {
if ( persister.canWriteToCache() ) {
final var cache = persister.getCacheAccessStrategy();
final var session = getSession();
final Object ck = cache.generateCacheKey(
final Object cacheKey = cache.generateCacheKey(
getId(),
persister,
session.getFactory(),
session.getTenantIdentifier()
);
lock = cache.lockItem( session, ck, getCurrentVersion() );
return ck;
lock = cache.lockItem( session, cacheKey, getCurrentVersion() );
return cacheKey;
}
else {
return null;
Expand All @@ -279,21 +284,21 @@ protected void unlockCacheItem() {
if ( persister.canWriteToCache() ) {
final var cache = persister.getCacheAccessStrategy();
final var session = getSession();
final Object ck = cache.generateCacheKey(
final Object cacheKey = cache.generateCacheKey(
getId(),
persister,
session.getFactory(),
session.getTenantIdentifier()
);
cache.unlockItem( session, ck, lock );
cache.unlockItem( session, cacheKey, lock );
}
}

protected void removeCacheItem(Object ck) {
protected void removeCacheItem(Object cacheKey) {
final var persister = getPersister();
if ( persister.canWriteToCache() ) {
final var cache = persister.getCacheAccessStrategy();
cache.remove( getSession(), ck );
cache.remove( getSession(), cacheKey );

final var statistics = getSession().getFactory().getStatistics();
if ( statistics.isStatisticsEnabled() ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.stat.internal.StatsHelper;

import static org.hibernate.cache.spi.entry.CacheEntryHelper.buildStructuredCacheEntry;

/**
* The action for performing an entity insertion, for entities not defined to use {@code IDENTITY} generation.
*
Expand Down Expand Up @@ -163,11 +165,10 @@ protected void putCacheIfNecessary() {
final var session = getSession();
if ( isCachePutEnabled( persister, session ) ) {
final var factory = session.getFactory();
final var cacheEntry = persister.buildCacheEntry( getInstance(), getState(), version, session );
this.cacheEntry = persister.getCacheEntryStructure().structure( cacheEntry );
cacheEntry = buildStructuredCacheEntry( getInstance(), version, getState(), persister, session );
final var cache = persister.getCacheAccessStrategy();
final Object ck = cache.generateCacheKey( getId(), persister, factory, session.getTenantIdentifier() );
final boolean put = cacheInsert( persister, ck );
final Object cacheKey = cache.generateCacheKey( getId(), persister, factory, session.getTenantIdentifier() );
final boolean put = cacheInsert( persister, cacheKey );

final var statistics = factory.getStatistics();
if ( put && statistics.isStatisticsEnabled() ) {
Expand All @@ -179,7 +180,7 @@ protected void putCacheIfNecessary() {
}
}

protected boolean cacheInsert(EntityPersister persister, Object ck) {
protected boolean cacheInsert(EntityPersister persister, Object cacheKey) {
final var session = getSession();
final var eventMonitor = session.getEventMonitor();
final var cachePutEvent = eventMonitor.beginCachePutEvent();
Expand All @@ -188,7 +189,7 @@ protected boolean cacheInsert(EntityPersister persister, Object ck) {
boolean insert = false;
try {
eventListenerManager.cachePutStart();
insert = cacheAccessStrategy.insert( session, ck, cacheEntry, version );
insert = cacheAccessStrategy.insert( session, cacheKey, cacheEntry, version );
return insert;
}
finally {
Expand Down Expand Up @@ -247,13 +248,14 @@ protected boolean preInsert() {
}

@Override
public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) throws HibernateException {
public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session)
throws HibernateException {
final var persister = getPersister();
if ( success && isCachePutEnabled( persister, getSession() ) ) {
final var cache = persister.getCacheAccessStrategy();
final var factory = session.getFactory();
final Object ck = cache.generateCacheKey( getId(), persister, factory, session.getTenantIdentifier() );
final boolean put = cacheAfterInsert( cache, ck );
final Object cacheKey = cache.generateCacheKey( getId(), persister, factory, session.getTenantIdentifier() );
final boolean put = cacheAfterInsert( cache, cacheKey );

final var statistics = factory.getStatistics();
if ( put && statistics.isStatisticsEnabled() ) {
Expand All @@ -266,15 +268,15 @@ public void doAfterTransactionCompletion(boolean success, SharedSessionContractI
postCommitInsert( success );
}

protected boolean cacheAfterInsert(EntityDataAccess cache, Object ck) {
protected boolean cacheAfterInsert(EntityDataAccess cache, Object cacheKey) {
final var session = getSession();
final var eventListenerManager = session.getEventListenerManager();
final var eventMonitor = session.getEventMonitor();
final var cachePutEvent = eventMonitor.beginCachePutEvent();
boolean afterInsert = false;
try {
eventListenerManager.cachePutStart();
afterInsert = cache.afterInsert( session, ck, cacheEntry, version );
afterInsert = cache.afterInsert( session, cacheKey, cacheEntry, version );
return afterInsert;
}
finally {
Expand Down
Loading