[hibernate-commits] Hibernate SVN: r18528 - in core/trunk/core/src/main/java/org/hibernate: engine and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Jan 13 01:02:15 EST 2010


Author: gbadner
Date: 2010-01-13 01:02:14 -0500 (Wed, 13 Jan 2010)
New Revision: 18528

Modified:
   core/trunk/core/src/main/java/org/hibernate/action/EntityDeleteAction.java
   core/trunk/core/src/main/java/org/hibernate/engine/EntityEntry.java
   core/trunk/core/src/main/java/org/hibernate/engine/StatefulPersistenceContext.java
   core/trunk/core/src/main/java/org/hibernate/engine/TwoPhaseLoad.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultEvictEventListener.java
Log:
HHH-4737 : Cache the EntityKey in EntityEntry when id is non-null

Modified: core/trunk/core/src/main/java/org/hibernate/action/EntityDeleteAction.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/action/EntityDeleteAction.java	2010-01-13 03:03:49 UTC (rev 18527)
+++ core/trunk/core/src/main/java/org/hibernate/action/EntityDeleteAction.java	2010-01-13 06:02:14 UTC (rev 18528)
@@ -108,9 +108,8 @@
 		}
 		entry.postDelete();
 
-		EntityKey key = new EntityKey( entry.getId(), entry.getPersister(), session.getEntityMode() );
-		persistenceContext.removeEntity(key);
-		persistenceContext.removeProxy(key);
+		persistenceContext.removeEntity( entry.getEntityKey() );
+		persistenceContext.removeProxy( entry.getEntityKey() );
 		
 		if ( persister.hasCache() ) {
 			persister.getCacheAccessStrategy().remove( ck );

Modified: core/trunk/core/src/main/java/org/hibernate/engine/EntityEntry.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/EntityEntry.java	2010-01-13 03:03:49 UTC (rev 18527)
+++ core/trunk/core/src/main/java/org/hibernate/engine/EntityEntry.java	2010-01-13 06:02:14 UTC (rev 18528)
@@ -56,6 +56,7 @@
 	private transient EntityPersister persister; // for convenience to save some lookups
 	private final EntityMode entityMode;
 	private final String entityName;
+	private transient EntityKey cachedEntityKey; // cached EntityKey (lazy-initialized)
 	private boolean isBeingReplicated;
 	private boolean loadedWithLazyPropertiesUnfetched; //NOTE: this is not updated when properties are fetched lazily!
 	private final transient Object rowId;
@@ -165,6 +166,21 @@
 		return persister;
 	}
 
+	/**
+	 * Get the EntityKey based on this EntityEntry.
+	 * @return the EntityKey
+	 * @throws  IllegalStateException if getId() is null
+	 */
+	public EntityKey getEntityKey() {
+		if ( cachedEntityKey == null ) {
+			if ( getId() == null ) {
+				throw new IllegalStateException( "cannot generate an EntityKey when id is null.");
+			}
+			cachedEntityKey = new EntityKey( getId(), getPersister(), entityMode );
+		}
+		return cachedEntityKey;
+	}
+
 	void afterDeserialize(SessionFactoryImplementor factory) {
 		persister = factory.getEntityPersister( entityName );
 	}
@@ -225,7 +241,7 @@
 				earlyInsert ?
 						!isExistsInDatabase() :
 						session.getPersistenceContext().getNullifiableEntityKeys()
-							.contains( new EntityKey( getId(), getPersister(), entityMode ) )
+							.contains( getEntityKey() )
 				);
 	}
 	

Modified: core/trunk/core/src/main/java/org/hibernate/engine/StatefulPersistenceContext.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/StatefulPersistenceContext.java	2010-01-13 03:03:49 UTC (rev 18527)
+++ core/trunk/core/src/main/java/org/hibernate/engine/StatefulPersistenceContext.java	2010-01-13 06:02:14 UTC (rev 18528)
@@ -698,8 +698,7 @@
 	 */
 	public Object proxyFor(Object impl) throws HibernateException {
 		EntityEntry e = getEntry(impl);
-		EntityPersister p = e.getPersister();
-		return proxyFor( p, new EntityKey( e.getId(), p, session.getEntityMode() ), impl );
+		return proxyFor( e.getPersister(), e.getEntityKey(), impl );
 	}
 
 	/**

Modified: core/trunk/core/src/main/java/org/hibernate/engine/TwoPhaseLoad.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/TwoPhaseLoad.java	2010-01-13 03:03:49 UTC (rev 18527)
+++ core/trunk/core/src/main/java/org/hibernate/engine/TwoPhaseLoad.java	2010-01-13 06:02:14 UTC (rev 18528)
@@ -191,10 +191,7 @@
 		}
 
 		boolean isReallyReadOnly = readOnly || !persister.isMutable();
-		Object proxy = persistenceContext.getProxy(
-				new EntityKey(entityEntry.getId(), entityEntry.getPersister(), session.getEntityMode()
-			)
-		);
+		Object proxy = persistenceContext.getProxy( entityEntry.getEntityKey() );
 		if ( proxy != null ) {
 			// there is already a proxy for this impl
 			// only set the status to read-only if the proxy is read-only

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultEvictEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultEvictEventListener.java	2010-01-13 03:03:49 UTC (rev 18527)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultEvictEventListener.java	2010-01-13 06:02:14 UTC (rev 18528)
@@ -88,9 +88,8 @@
 		else {
 			EntityEntry e = persistenceContext.removeEntry( object );
 			if ( e != null ) {
-				EntityKey key = new EntityKey( e.getId(), e.getPersister(), source.getEntityMode()  );
-				persistenceContext.removeEntity( key );
-				doEvict( object, key, e.getPersister(), source );
+				persistenceContext.removeEntity( e.getEntityKey() );
+				doEvict( object, e.getEntityKey(), e.getPersister(), source );
 			}
 		}
 	}



More information about the hibernate-commits mailing list