All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.fluent.hibernate.FluentHibernateResultTransformer Maven / Gradle / Ivy

Go to download

A library to work with Hibernate by fluent API. This library hasn't dependencies except Hibernate dependencies. It requires Java 1.6 and above.

There is a newer version: 0.3.1
Show newest version
package com.github.fluent.hibernate;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.transform.ResultTransformer;

import com.github.fluent.hibernate.BasicIgnoreCasePropertyAccessor.BasicSetter;

/**
 * @author DoubleF1re
 * @author V.Ladynev
 */
public class FluentHibernateResultTransformer implements ResultTransformer {

    private static final long serialVersionUID = 6825154815776629666L;

    private static final String COULD_NOT_INSTANTIATE = "Could not instantiate resultclass: %s";

    @SuppressWarnings("rawtypes")
    private final Class resultClass;

    private BasicSetter[] setters;

    private final BasicIgnoreCasePropertyAccessor propertyAccessor;

    private final String[] instAliases;

    @SuppressWarnings("rawtypes")
    public FluentHibernateResultTransformer(Class resultClass) {
        this(resultClass, null);
    }

    /**
     *
     * @param resultClass
     *            : lCreated bean target class.
     * @param aliases
     *            : allows to override default aliases.
     */
    @SuppressWarnings("rawtypes")
    public FluentHibernateResultTransformer(Class resultClass, String[] aliases) {
        if (resultClass == null) {
            throw new IllegalArgumentException("resultClass cannot be null");
        }
        this.resultClass = resultClass;
        propertyAccessor = new BasicIgnoreCasePropertyAccessor();
        instAliases = aliases;
    }

    /**
     * @see org.hibernate.transform.ResultTransformer#transformTuple(java.lang.Object[],
     *      java.lang.String[])
     */
    @Override
    public Object transformTuple(Object[] tuple, String[] aliases) {
        Object result;

        if (instAliases != null) {
            aliases = instAliases;
        }

        try {
            if (setters == null) {
                setters = new BasicSetter[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(
                    String.format(COULD_NOT_INSTANTIATE, resultClass.getName()), e);
        } catch (IllegalAccessException e) {
            throw new HibernateException(
                    String.format(COULD_NOT_INSTANTIATE, resultClass.getName()), e);
        }

        return result;
    }

    /**
     * @see org.hibernate.transform.ResultTransformer#transformList(java.util.List)
     */
    @Override
    @SuppressWarnings("rawtypes")
    public List transformList(List collection) {
        return collection;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy