Created
August 29, 2012 13:13
-
-
Save carlosspohr/3512276 to your computer and use it in GitHub Desktop.
Exemplo do AliasToBeanResultTransformer usando no Hibernate 3.6.9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * 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 org.hibernate.HibernateException; | |
| import org.hibernate.property.ChainedPropertyAccessor; | |
| import org.hibernate.property.PropertyAccessor; | |
| import org.hibernate.property.PropertyAccessorFactory; | |
| 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. | |
| * <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(); | |
| * <p/> | |
| * StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0); | |
| * </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; | |
| public AliasToBeanResultTransformer(Class resultClass) { | |
| 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" ) | |
| } | |
| ); | |
| } | |
| public Object transformTuple(Object[] tuple, String[] aliases) { | |
| Object result; | |
| try { | |
| if ( setters == null ) { | |
| setters = new Setter[aliases.length]; | |
| for ( int i = 0; i < aliases.length; i++ ) { | |
| String alias = aliases[i]; | |
| 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 ); | |
| } | |
| } | |
| } | |
| 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; | |
| } | |
| public List transformList(List collection) { | |
| return collection; | |
| } | |
| public int hashCode() { | |
| int result; | |
| result = resultClass.hashCode(); | |
| result = 31 * result + propertyAccessor.hashCode(); | |
| return result; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment