Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

[hibernate-commits] Hibernate SVN: r14995 -
 core/trunk/core/src/main/java/org/hibernate/transform.

hibernate-commits

2008-07-30


Author LoginPost Reply
Author: steve.ebersole@(protected)
Date: 2008-07-30 16:55:24 -0400 (Wed, 30 Jul 2008)
New Revision: 14995

Added:
 core/trunk/core/src/main/java/org/hibernate/transform/BasicTransformerAdapter.java
 core/trunk/core/src/main/java/org/hibernate/transform/DistinctResultTransformer.java
Modified:
 core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanConstructorResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/AliasToEntityMapResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/DistinctRootEntityResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/PassThroughResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/RootEntityResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/ToListResultTransformer.java
 core/trunk/core/src/main/java/org/hibernate/transform/Transformers.java
Log:
HHH-3409 : ResultTransformer uniqueing

Modified: core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanConstructorResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanConstructorResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanConstructorResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@

import org.hibernate.QueryException;

+/**
+ * Wraps the tuples in a constructor call.
+ *
+ * todo : why Alias* in the name???
+ */
public class AliasToBeanConstructorResultTransformer implements ResultTransformer {

-  private Constructor constructor;
+  private final Constructor constructor;

+  /**
+   * Instantiates a AliasToBeanConstructorResultTransformer.
+   *
+   * @param constructor The contructor in which to wrap the tuples.
+   */
 public AliasToBeanConstructorResultTransformer(Constructor constructor) {
   this.constructor = constructor;
 }
 
+  /**
+   * Wrap the incoming tuples in a call to our configured constructor.
+   */
 public Object transformTuple(Object[] tuple, String[] aliases) {
   try {
     return constructor.newInstance( tuple );
   }
   catch ( Exception e ) {
     throw new QueryException(
-          "could not instantiate: " +
-          constructor.getDeclaringClass().getName(),
-          e );
+          "could not instantiate class [" + constructor.getDeclaringClass().getName() + "] from tuple",
+          e
+      );
   }
 }

+  /**
+   * {@(protected)}
+   */
 public List transformList(List collection) {
   return collection;
 }

-  
+  /**
+   * Define our hashCode by our defined constructor's hasCode.
+   *
+   * @return Our defined ctor hashCode
+   */
+  public int hashCode() {
+    return constructor.hashCode();
+  }
+
+  /**
+   * 2 AliasToBeanConstructorResultTransformer are considered equal if they have the same
+   * defined constructor.
+   *
+   * @param other The other instance to check for equality.
+   * @return True if both have the same defined constuctor; false otherwise.
+   */
+  public boolean equals(Object other) {
+    return other instanceof AliasToBeanConstructorResultTransformer
+        && constructor.equals( ( ( AliasToBeanConstructorResultTransformer ) other ).constructor );
+  }
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/AliasToBeanResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
import org.hibernate.property.Setter;

/**
- * Result transformer that allows to transform a result to
- * a user specified class which will be populated via setter
- * methods or fields matching the alias names.
- *
+ * Result transformer that allows to transform a result to
+ * a user specified class which will be populated via setter
+ * methods or fields matching the alias names.
+ * <p/>
* <pre>
* List resultWithAliasedBean = s.createCriteria(Enrolment.class)
- *      .createAlias("student", "st")
- *      .createAlias("course", "co")
- *      .setProjection( Projections.projectionList()
- *          .add( Projections.property("co.description"), "courseDescription" )
- *      )
- *      .setResultTransformer( new AliasToBeanResultTransformer(StudentDTO.class) )
- *      .list();
- *
+ *      .createAlias("student", "st")
+ *      .createAlias("course", "co")
+ *      .setProjection( Projections.projectionList()
+ *          .add( Projections.property("co.description"), "courseDescription" )
+ *      )
+ *      .setResultTransformer( new AliasToBeanResultTransformer(StudentDTO.class) )
+ *      .list();
+ * <p/>
* StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0);
- *  </pre>
+ *  </pre>
*
* @author max
- *
*/
public class AliasToBeanResultTransformer implements ResultTransformer {
-  
+
+  // IMPL NOTE : due to the delayed population of setters (setters cached
+  //    for performance), we really cannot pro0perly define equality for
+  //    this transformer
+
 private final Class resultClass;
+  private final PropertyAccessor propertyAccessor;
 private Setter[] setters;
-  private PropertyAccessor propertyAccessor;
-  
+
 public AliasToBeanResultTransformer(Class resultClass) {
-    if(resultClass==null) throw new IllegalArgumentException("resultClass cannot be null");
+    if ( resultClass == null ) {
+      throw new IllegalArgumentException( "resultClass cannot be null" );
+    }
   this.resultClass = resultClass;
-    propertyAccessor = new ChainedPropertyAccessor(new PropertyAccessor[] { PropertyAccessorFactory.getPropertyAccessor(resultClass,null), PropertyAccessorFactory.getPropertyAccessor("field")});    
+    propertyAccessor = new ChainedPropertyAccessor(
+        new PropertyAccessor[] {
+            PropertyAccessorFactory.getPropertyAccessor( resultClass, null ),
+            PropertyAccessorFactory.getPropertyAccessor( "field" )
+        }
+    );
 }

 public Object transformTuple(Object[] tuple, String[] aliases) {
   Object result;
-    
+
   try {
-      if(setters==null) {
+      if ( setters == null ) {
       setters = new Setter[aliases.length];
-        for (int i = 0; i < aliases.length; i++) {
+        for ( int i = 0; i < aliases.length; i++ ) {
         String alias = aliases[i];
-          if(alias != null) {
-            setters[i] = propertyAccessor.getSetter(resultClass, alias);
+          if ( alias != null ) {
+            setters[i] = propertyAccessor.getSetter( resultClass, alias );
         }
       }
     }
     result = resultClass.newInstance();
-      
-      for (int i = 0; i < aliases.length; i++) {
-        if(setters[i]!=null) {
-          setters[i].set(result, tuple[i], null);
+
+      for ( int i = 0; i < aliases.length; i++ ) {
+        if ( setters[i] != null ) {
+          setters[i].set( result, tuple[i], null );
       }
     }
-    } catch (InstantiationException e) {
-      throw new HibernateException("Could not instantiate resultclass: " + resultClass.getName());
-    } catch (IllegalAccessException e) {
-      throw new HibernateException("Could not instantiate resultclass: " + resultClass.getName());
   }
-    
+    catch ( InstantiationException e ) {
+      throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );
+    }
+    catch ( IllegalAccessException e ) {
+      throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );
+    }
+
   return result;
 }

@@(protected) @@
   return collection;
 }

+  public int hashCode() {
+    int result;
+    result = resultClass.hashCode();
+    result = 31 * result + propertyAccessor.hashCode();
+    return result;
+  }
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/AliasToEntityMapResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/AliasToEntityMapResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/AliasToEntityMapResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
package org.hibernate.transform;

import java.util.HashMap;
-import java.util.List;
import java.util.Map;
+import java.io.Serializable;

/**
+ * {@(protected)",
+ * made up of each aliased value where the alias is the map key.
+ * <p/>
+ * Since this transformer is stateless, all instances would be considered equal.
+ * So for optimization purposes we limit it to a single, singleton {@(protected)}.
+ *
* @author Gavin King
+ * @author Steve Ebersole
*/
-public class AliasToEntityMapResultTransformer implements ResultTransformer {
+public class AliasToEntityMapResultTransformer extends BasicTransformerAdapter implements Serializable {

+  public static final AliasToEntityMapResultTransformer INSTANCE = new AliasToEntityMapResultTransformer();
+
+  /**
+   * Instantiate AliasToEntityMapResultTransformer.
+   *
+   * @deprecated Use the {@(protected).
+   */
+  public AliasToEntityMapResultTransformer() {
+    // todo : make private
+  }
+
 public Object transformTuple(Object[] tuple, String[] aliases) {
   Map result = new HashMap(tuple.length);
   for ( int i=0; i<tuple.length; i++ ) {
@@(protected) @@
   return result;
 }

-  public List transformList(List collection) {
-    return collection;
+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
 }

+
+  // all AliasToEntityMapResultTransformer are considered equal ~~~~~~~~~~~~~
+
+  /**
+   * All AliasToEntityMapResultTransformer are considered equal
+   *
+   * @param other The other instance to check for equality
+   * @return True if (non-null) other is a instance of
+   * AliasToEntityMapResultTransformer.
+   */
+  public boolean equals(Object other) {
+    // todo : we can remove this once the deprecated ctor can be made private...
+    return other != null && AliasToEntityMapResultTransformer.class.isInstance( other );
+  }
+
+  /**
+   * All AliasToEntityMapResultTransformer are considered equal
+   *
+   * @return We simply return the hashCode of the
+   * AliasToEntityMapResultTransformer class name string.
+   */
+  public int hashCode() {
+    // todo : we can remove this once the deprecated ctor can be made private...
+    return getClass().getName().hashCode();
+  }
}

Added: core/trunk/core/src/main/java/org/hibernate/transform/BasicTransformerAdapter.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/BasicTransformerAdapter.java                  (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/transform/BasicTransformerAdapter.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.transform;
+
+import java.util.List;
+
+/**
+ * Provides the basic "noop" impls of the {@(protected).
+ *
+ * @author Steve Ebersole
+ */
+public abstract class BasicTransformerAdapter implements ResultTransformer {
+  public Object transformTuple(Object[] tuple, String[] aliases) {
+    return tuple;
+  }
+
+  public List transformList(List list) {
+    return list;
+  }
+}

Added: core/trunk/core/src/main/java/org/hibernate/transform/DistinctResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/DistinctResultTransformer.java                  (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/transform/DistinctResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.transform;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+import java.io.Serializable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Distinctions the result tuples in the final result based on the defined
+ * equality of the tuples.
+ * <p/>
+ * Since this transformer is stateless, all instances would be considered equal.
+ * So for optimization purposes we limit it to a single, singleton {@(protected)}.
+ *
+ * @author Steve Ebersole
+ */
+public class DistinctResultTransformer extends BasicTransformerAdapter implements Serializable {
+
+  public static final DistinctResultTransformer INSTANCE = new DistinctResultTransformer();
+
+  private static final Logger log = LoggerFactory.getLogger( DistinctResultTransformer.class );
+
+  /**
+   * Helper class to handle distincting
+   */
+  private static final class Identity {
+    final Object entity;
+
+    private Identity(Object entity) {
+      this.entity = entity;
+    }
+
+    /**
+     * {@(protected)}
+     */
+    public boolean equals(Object other) {
+      return Identity.class.isInstance( other )
+          && this.entity == ( ( Identity ) other ).entity;
+    }
+
+    /**
+     * {@(protected)}
+     */
+    public int hashCode() {
+      return System.identityHashCode( entity );
+    }
+  }
+
+  /**
+   * Disallow instantiation of DistinctResultTransformer.
+   */
+  private DistinctResultTransformer() {
+  }
+
+  /**
+   * Uniquely distinct each tuple row here.
+   */
+  public List transformList(List list) {
+    List result = new ArrayList( list.size() );
+    Set distinct = new HashSet();
+    for ( int i = 0; i < list.size(); i++ ) {
+      Object entity = list.get( i );
+      if ( distinct.add( new Identity( entity ) ) ) {
+        result.add( entity );
+      }
+    }
+    if ( log.isDebugEnabled() ) {
+      log.debug(
+          "transformed: " +
+              list.size() + " rows to: " +
+              result.size() + " distinct results"
+      );
+    }
+    return result;
+  }
+
+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
+  }
+}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/DistinctRootEntityResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/DistinctRootEntityResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/DistinctRootEntityResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
*/
package org.hibernate.transform;

-import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
+import java.io.Serializable;

-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
+ * Much like {@(protected)
+ * the entity in the final result.
+ * <p/>
+ * Since this transformer is stateless, all instances would be considered equal.
+ * So for optimization purposes we limit it to a single, singleton {@(protected)}.
+ *
* @author Gavin King
+ * @author Steve Ebersole
*/
-public class DistinctRootEntityResultTransformer implements ResultTransformer {
+public class DistinctRootEntityResultTransformer implements ResultTransformer, Serializable {

-  private static final Logger log = LoggerFactory.getLogger(DistinctRootEntityResultTransformer.class);
+  public static final DistinctRootEntityResultTransformer INSTANCE = new DistinctRootEntityResultTransformer();

-  static final class Identity {
-    final Object entity;
-    Identity(Object entity) {
-      this.entity = entity;
-    }
-    public boolean equals(Object other) {
-      Identity that = (Identity) other;
-      return entity==that.entity;
-    }
-    public int hashCode() {
-      return System.identityHashCode(entity);
-    }
+  /**
+   * Instantiate a DistinctRootEntityResultTransformer.
+   *
+   * @deprecated Use the {@(protected).
+   */
+  public DistinctRootEntityResultTransformer() {
 }

+  /**
+   * Simply delegates to {@(protected)}.
+   *
+   * @param tuple The tuple to transform
+   * @param aliases The tuple aliases
+   * @return The transformed tuple row.
+   */
 public Object transformTuple(Object[] tuple, String[] aliases) {
-    return tuple[ tuple.length-1 ];
+    return RootEntityResultTransformer.INSTANCE.transformTuple( tuple, aliases );
 }

+  /**
+   * Simply delegates to {@(protected)}.
+   *
+   * @param list The list to transform.
+   * @return The transformed List.
+   */
 public List transformList(List list) {
-    List result = new ArrayList( list.size() );
-    Set distinct = new HashSet();
-    for ( int i=0; i<list.size(); i++ ) {
-      Object entity = list.get(i);
-      if ( distinct.add( new Identity(entity) ) ) {
-        result.add(entity);
-      }
-    }
-    if ( log.isDebugEnabled() ) log.debug(
-      "transformed: " +
-      list.size() + " rows to: " +
-      result.size() + " distinct results"
-    );
-    return result;
+    return DistinctResultTransformer.INSTANCE.transformList( list );
 }

+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
+  }
+
+  public boolean equals(Object obj) {
+    // todo : we can remove this once the deprecated ctor can be made private...
+    return DistinctRootEntityResultTransformer.class.isInstance( obj );
+  }
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/PassThroughResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/PassThroughResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/PassThroughResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
*/
package org.hibernate.transform;

-import java.util.List;
+import java.io.Serializable;

/**
+ * ???
+ *
* @author max
*/
-public class PassThroughResultTransformer implements ResultTransformer {
+public class PassThroughResultTransformer extends BasicTransformerAdapter implements Serializable {

+  public static final PassThroughResultTransformer INSTANCE = new PassThroughResultTransformer();
+
+  /**
+   * Instamtiate a PassThroughResultTransformer.
+   *
+   * @deprecated Use the {@(protected).
+   */
+  public PassThroughResultTransformer() {
+  }
+
 public Object transformTuple(Object[] tuple, String[] aliases) {
   return tuple.length==1 ? tuple[0] : tuple;
 }

-  public List transformList(List collection) {
-    return collection;
+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
 }

+  public boolean equals(Object obj) {
+    // todo : we can remove this once the deprecated ctor can be made private...
+    return PassThroughResultTransformer.class.isInstance( obj );
+  }
+
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/RootEntityResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/RootEntityResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/RootEntityResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
package org.hibernate.transform;

import java.util.List;
+import java.io.Serializable;

/**
+ * {@(protected)
+ * to only the "root entity".
+ * <p/>
+ * Since this transformer is stateless, all instances would be considered equal.
+ * So for optimization purposes we limit it to a single, singleton {@(protected)}.
+ *
* @author Gavin King
+ * @author Steve Ebersole
*/
-public class RootEntityResultTransformer implements ResultTransformer {
+public final class RootEntityResultTransformer extends BasicTransformerAdapter implements Serializable {

+  public static final RootEntityResultTransformer INSTANCE = new RootEntityResultTransformer();
+
+  /**
+   * Instantiate RootEntityResultTransformer.
+   *
+   * @deprecated Use the {@(protected).
+   */
+  public RootEntityResultTransformer() {
+  }
+
+  /**
+   * Return just the root entity from the row tuple.
+   */
 public Object transformTuple(Object[] tuple, String[] aliases) {
   return tuple[ tuple.length-1 ];
 }

-  public List transformList(List collection) {
-    return collection;
+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
 }

+  public boolean equals(Object obj) {
+    // todo : we can remove this once the deprecated ctor can be made private...
+    return RootEntityResultTransformer.class.isInstance( obj );
+  }
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/ToListResultTransformer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/ToListResultTransformer.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/ToListResultTransformer.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@

import java.util.Arrays;
import java.util.List;
+import java.io.Serializable;

-public class ToListResultTransformer implements ResultTransformer {
+/**
+ * Tranforms each result row from a tuple into a {@(protected)
+ * you end up with is a {@(protected)}.
+ */
+public class ToListResultTransformer extends BasicTransformerAdapter implements Serializable {

-  public static final ResultTransformer INSTANCE = new ToListResultTransformer();
+  public static final ToListResultTransformer INSTANCE = new ToListResultTransformer();

-  private ToListResultTransformer() {}
+  /**
+   * Disallow instantiation of ToListResultTransformer.
+   */
+  private ToListResultTransformer() {
+  }
 
+  /**
+   * {@(protected)}
+   */
 public Object transformTuple(Object[] tuple, String[] aliases) {
-    return Arrays.asList(tuple);
+    return Arrays.asList( tuple );
 }

-  public List transformList(List collection) {
-    return collection;
+  /**
+   * Serialization hook for ensuring singleton uniqueing.
+   *
+   * @return The singleton instance : {@(protected)}
+   */
+  private Object readResolve() {
+    return INSTANCE;
 }
-
}

Modified: core/trunk/core/src/main/java/org/hibernate/transform/Transformers.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/transform/Transformers.java  2008-07-30 17:21:58 UTC (rev 14994)
+++ core/trunk/core/src/main/java/org/hibernate/transform/Transformers.java  2008-07-30 20:55:24 UTC (rev 14995)
@@(protected) @@
 /**
  * Each row of results is a <tt>Map</tt> from alias to values/entities
  */
-  public static final ResultTransformer ALIAS_TO_ENTITY_MAP = new AliasToEntityMapResultTransformer();
+  public static final AliasToEntityMapResultTransformer ALIAS_TO_ENTITY_MAP =
+      AliasToEntityMapResultTransformer.INSTANCE;

 /**
  * Each row of results is a <tt>List</tt>

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.