[hibernate-commits] Hibernate SVN: r18759 - core/trunk/core/src/main/java/org/hibernate/event/def.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Wed Feb 10 02:03:48 EST 2010
Author: gbadner
Date: 2010-02-10 02:03:48 -0500 (Wed, 10 Feb 2010)
New Revision: 18759
Modified:
core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java
Log:
HHH-4896 : Read-only proxy targets initialized from second-level cache are not read-only
Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java 2010-02-10 07:00:59 UTC (rev 18758)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java 2010-02-10 07:03:48 UTC (rev 18759)
@@ -635,8 +635,9 @@
session.instantiate( subclassPersister, id ) : optionalObject;
// make it circular-reference safe
+ EntityKey entityKey = new EntityKey( id, subclassPersister, session.getEntityMode() );
TwoPhaseLoad.addUninitializedCachedEntity(
- new EntityKey( id, subclassPersister, session.getEntityMode() ),
+ entityKey,
result,
subclassPersister,
LockMode.NONE,
@@ -659,12 +660,21 @@
if ( log.isTraceEnabled() ) log.trace( "Cached Version: " + version );
final PersistenceContext persistenceContext = session.getPersistenceContext();
+ boolean isReadOnly = session.isDefaultReadOnly();
+ if ( persister.isMutable() ) {
+ Object proxy = persistenceContext.getProxy( entityKey );
+ if ( proxy != null ) {
+ // there is already a proxy for this impl
+ // only set the status to read-only if the proxy is read-only
+ isReadOnly = ( ( HibernateProxy ) proxy ).getHibernateLazyInitializer().isReadOnly();
+ }
+ }
+ else {
+ isReadOnly = true;
+ }
persistenceContext.addEntry(
result,
- ( session.isDefaultReadOnly() || ! persister.isMutable() ?
- Status.READ_ONLY :
- Status.MANAGED
- ),
+ ( isReadOnly ? Status.READ_ONLY : Status.MANAGED ),
values,
null,
id,
More information about the hibernate-commits
mailing list