[hibernate-commits] Hibernate SVN: r18760 - core/trunk/core/src/main/java/org/hibernate/loader.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Wed Feb 10 02:05:33 EST 2010
Author: gbadner
Date: 2010-02-10 02:05:33 -0500 (Wed, 10 Feb 2010)
New Revision: 18760
Modified:
core/trunk/core/src/main/java/org/hibernate/loader/Loader.java
Log:
HHH-4898 : Results from read-only Criteria and Query obtained from query cache are not read-only
Modified: core/trunk/core/src/main/java/org/hibernate/loader/Loader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/Loader.java 2010-02-10 07:03:48 UTC (rev 18759)
+++ core/trunk/core/src/main/java/org/hibernate/loader/Loader.java 2010-02-10 07:05:33 UTC (rev 18760)
@@ -2170,14 +2170,14 @@
session
);
- List result = getResultFromQueryCache(
+ List result = getResultFromQueryCache(
session,
queryParameters,
querySpaces,
resultTypes,
queryCache,
key
- );
+ );
if ( result == null ) {
result = doList( session, queryParameters );
@@ -2207,7 +2207,26 @@
if ( session.getCacheMode().isGetEnabled() ) {
boolean isImmutableNaturalKeyLookup = queryParameters.isNaturalKeyLookup()
&& getEntityPersisters()[0].getEntityMetamodel().hasImmutableNaturalId();
- result = queryCache.get( key, resultTypes, isImmutableNaturalKeyLookup, querySpaces, session );
+
+ final PersistenceContext persistenceContext = session.getPersistenceContext();
+ boolean defaultReadOnlyOrig = persistenceContext.isDefaultReadOnly();
+ if ( queryParameters.isReadOnlyInitialized() ) {
+ // The read-only/modifiable mode for the query was explicitly set.
+ // Temporarily set the default read-only/modifiable setting to the query's setting.
+ persistenceContext.setDefaultReadOnly( queryParameters.isReadOnly() );
+ }
+ else {
+ // The read-only/modifiable setting for the query was not initialized.
+ // Use the default read-only/modifiable from the persistence context instead.
+ queryParameters.setReadOnly( persistenceContext.isDefaultReadOnly() );
+ }
+ try {
+ result = queryCache.get( key, resultTypes, isImmutableNaturalKeyLookup, querySpaces, session );
+ }
+ finally {
+ persistenceContext.setDefaultReadOnly( defaultReadOnlyOrig );
+ }
+
if ( factory.getStatistics().isStatisticsEnabled() ) {
if ( result == null ) {
factory.getStatisticsImplementor()
More information about the hibernate-commits
mailing list