Hibernate中3种结果转换的详细说明
Hibernate中3种结果转换的详细说明
在hibernate使用的过程中.我们通常需要对结果进行解释.
Hibernate为我们提供了以下3种解释方法:
Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成mapTransformers.TO_LIST //把结果按顺序排进Listransformers.aliasToBean(target) //把结果通过setter方法注入到指定的对像属性中
/** * {@inheritDoc} *///aliases key//tuple valuepublic Object transformTuple(Object[] tuple, String[] aliases) {Map result = new HashMap(tuple.length);for ( int i=0; i<tuple.length; i++ ) {String alias = aliases[i];if ( alias!=null ) {result.put( alias, tuple[i] );}}return result;}
/** * {@inheritDoc} *///aliases key//tuple valuepublic Object transformTuple(Object[] tuple, String[] aliases) {return Arrays.asList( tuple );}
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 ) {//初始指定的setter方法setters[i] = propertyAccessor.getSetter( resultClass, alias );}}}//实例实体对像result = resultClass.newInstance();for ( int i = 0; i < aliases.length; i++ ) {if ( setters[i] != null ) {//向setter方法中指定的属性注入值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;}