HHH-15702 add Session.setCacheRetrieveMode, Session.setCacheStoreMode

This commit is contained in:
Gavin King 2022-11-10 10:15:17 +01:00
parent 5c90779a02
commit 778675b867
4 changed files with 59 additions and 4 deletions

View File

@ -8,6 +8,8 @@ package org.hibernate;
import java.util.List; import java.util.List;
import jakarta.persistence.CacheRetrieveMode;
import jakarta.persistence.CacheStoreMode;
import jakarta.persistence.PessimisticLockScope; import jakarta.persistence.PessimisticLockScope;
import org.hibernate.graph.RootGraph; import org.hibernate.graph.RootGraph;
import org.hibernate.query.Query; import org.hibernate.query.Query;
@ -203,6 +205,24 @@ public interface Session extends SharedSessionContract, EntityManager {
*/ */
CacheMode getCacheMode(); CacheMode getCacheMode();
/**
* Enable or disable writes to the second-level cache.
*
* @param cacheStoreMode a JPA-defined {@link CacheStoreMode}
*
* @see #setCacheMode(CacheMode)
*/
void setCacheStoreMode(CacheStoreMode cacheStoreMode);
/**
* Enable or disable reads from the second-level cache.
*
* @param cacheRetrieveMode a JPA-defined {@link CacheRetrieveMode}
*
* @see #setCacheMode(CacheMode)
*/
void setCacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode);
/** /**
* Get the session factory which created this session. * Get the session factory which created this session.
* *

View File

@ -12,6 +12,8 @@ import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.UUID; import java.util.UUID;
import jakarta.persistence.CacheRetrieveMode;
import jakarta.persistence.CacheStoreMode;
import org.hibernate.CacheMode; import org.hibernate.CacheMode;
import org.hibernate.Filter; import org.hibernate.Filter;
import org.hibernate.FlushMode; import org.hibernate.FlushMode;
@ -205,6 +207,16 @@ public class SessionDelegatorBaseImpl implements SessionImplementor {
delegate.setCacheMode( cm ); delegate.setCacheMode( cm );
} }
@Override
public void setCacheStoreMode(CacheStoreMode cacheStoreMode) {
delegate.setCacheStoreMode( cacheStoreMode );
}
@Override
public void setCacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode) {
delegate.setCacheRetrieveMode( cacheRetrieveMode );
}
@Override @Override
public void setCriteriaCopyTreeEnabled(boolean jpaCriteriaCopyComplianceEnabled) { public void setCriteriaCopyTreeEnabled(boolean jpaCriteriaCopyComplianceEnabled) {
delegate.setCriteriaCopyTreeEnabled( jpaCriteriaCopyComplianceEnabled ); delegate.setCriteriaCopyTreeEnabled( jpaCriteriaCopyComplianceEnabled );

View File

@ -10,6 +10,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
import jakarta.persistence.CacheRetrieveMode;
import jakarta.persistence.CacheStoreMode;
import org.hibernate.CacheMode; import org.hibernate.CacheMode;
import org.hibernate.Filter; import org.hibernate.Filter;
import org.hibernate.FlushMode; import org.hibernate.FlushMode;
@ -99,6 +101,16 @@ public class SessionLazyDelegator implements Session {
this.lazySession.get().setCacheMode( cacheMode ); this.lazySession.get().setCacheMode( cacheMode );
} }
@Override
public void setCacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode) {
this.lazySession.get().setCacheRetrieveMode( cacheRetrieveMode );
}
@Override
public void setCacheStoreMode(CacheStoreMode cacheStoreMode) {
this.lazySession.get().setCacheStoreMode( cacheStoreMode );
}
@Override @Override
public CacheMode getCacheMode() { public CacheMode getCacheMode() {
return this.lazySession.get().getCacheMode(); return this.lazySession.get().getCacheMode();
@ -275,7 +287,7 @@ public class SessionLazyDelegator implements Session {
this.lazySession.get().lock( object, lockMode ); this.lazySession.get().lock( object, lockMode );
} }
@Override @Override @Deprecated
public void lock(String entityName, Object object, LockMode lockMode) { public void lock(String entityName, Object object, LockMode lockMode) {
this.lazySession.get().lock( entityName, object, lockMode ); this.lazySession.get().lock( entityName, object, lockMode );
} }

View File

@ -152,6 +152,7 @@ import jakarta.persistence.PersistenceException;
import jakarta.persistence.TransactionRequiredException; import jakarta.persistence.TransactionRequiredException;
import org.hibernate.type.descriptor.WrapperOptions; import org.hibernate.type.descriptor.WrapperOptions;
import static org.hibernate.CacheMode.fromJpaModes;
import static org.hibernate.cfg.AvailableSettings.JAKARTA_LOCK_SCOPE; import static org.hibernate.cfg.AvailableSettings.JAKARTA_LOCK_SCOPE;
import static org.hibernate.cfg.AvailableSettings.JAKARTA_LOCK_TIMEOUT; import static org.hibernate.cfg.AvailableSettings.JAKARTA_LOCK_TIMEOUT;
import static org.hibernate.cfg.AvailableSettings.JAKARTA_SHARED_CACHE_RETRIEVE_MODE; import static org.hibernate.cfg.AvailableSettings.JAKARTA_SHARED_CACHE_RETRIEVE_MODE;
@ -1835,6 +1836,16 @@ public class SessionImpl
persistenceContext.setReadOnly( entity, readOnly ); persistenceContext.setReadOnly( entity, readOnly );
} }
@Override
public void setCacheStoreMode(CacheStoreMode cacheStoreMode) {
setCacheMode( fromJpaModes( getCacheMode().getJpaRetrieveMode(), cacheStoreMode ) );
}
@Override
public void setCacheRetrieveMode(CacheRetrieveMode cacheRetrieveMode) {
setCacheMode( fromJpaModes( cacheRetrieveMode, getCacheMode().getJpaStoreMode() ) );
}
@Override @Override
public void afterScrollOperation() { public void afterScrollOperation() {
// nothing to do in a stateful session // nothing to do in a stateful session
@ -2119,18 +2130,18 @@ public class SessionImpl
return this; return this;
} }
@Override @Override @Deprecated @SuppressWarnings("deprecation")
public boolean getScope() { public boolean getScope() {
return lockOptions.getScope(); return lockOptions.getScope();
} }
@Override @Override @Deprecated @SuppressWarnings("deprecation")
public LockRequest setScope(boolean scope) { public LockRequest setScope(boolean scope) {
lockOptions.setScope( scope ); lockOptions.setScope( scope );
return this; return this;
} }
@Override @Override @Deprecated @SuppressWarnings("deprecation")
public void lock(String entityName, Object object) throws HibernateException { public void lock(String entityName, Object object) throws HibernateException {
fireLock( entityName, object, lockOptions ); fireLock( entityName, object, lockOptions );
} }