Estate atento ya que en este escrito hallarás la respuesta que buscas.
Solución:
Este código funcionó para mí
Clase DTO:
public class ItemResponse
private T item;
public ItemResponse()
public ItemResponse(T item)
super();
this.item = item;
public T getItem()
return item;
public void setItem(T item)
this.item = item;
La clase de servicio está en la siguiente
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Service;
import org.hibernate.transform.AliasToEntityMapResultTransformer;
@Service
public class ServiceClass
@PersistenceContext
public EntityManager entityManager;
public ItemResponse exceuteQueryResponse(String queryString)
ItemResponse itemResponse=new ItemResponse();
Query jpaQuery = entityManager.createNativeQuery(queryString);
org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)jpaQuery).getHibernateQuery();
hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List
2020
Con hibernate 5.2.11.Final es bastante fácil. En mi ejemplo, puede ver cómo obtengo los nombres de columna para cada fila. Y cómo obtengo valores por nombre de columna.
Query q = em.createNativeQuery("SELECT columnA, columnB FROM table");
List result = q.getResultList();
for (Tuple row: result)
// Get Column Names
List> elements = row.getElements();
for (TupleElement
La respuesta DTO de Ryiad agrega algo de confusión, deberías haberlo mantenido alejado. Deberías haber explicado que funciona solo con hibernate.
Si, como yo, necesita mantener el orden de las columnas, puede especificar su propio transformador. copié el código de hibernate y cambié HashMap a LinkedHashMap:
import java.util.LinkedHashMap;
import java.util.Map;
import org.hibernate.transform.AliasedTupleSubsetResultTransformer;
import org.hibernate.transform.ResultTransformer;
/**
* @link ResultTransformer implementation which builds a map for each "row", made up of each aliased value where the
* alias is the map key. Inspired by @link org.hibernate.transform.AliasToEntityMapResultTransformer, but kepping the
* ordering of elements.
*
* Since this transformer is stateless, all instances would be considered equal. So for optimization purposes we limit
* it to a single, singleton @link #INSTANCE instance.
*/
public class AliasToEntityMapResultTransformer extends AliasedTupleSubsetResultTransformer
public static final AliasToEntityMapResultTransformer INSTANCE = new AliasToEntityMapResultTransformer();
/**
* Disallow instantiation of AliasToEntityMapResultTransformer.
*/
private AliasToEntityMapResultTransformer()
@Override
public Object transformTuple(Object[] tuple, String[] aliases)
Map result = new LinkedHashMap<>(tuple.length);
for (int i = 0; i < tuple.length; i++)
String alias = aliases[i];
if (alias != null)
result.put(alias, tuple[i]);
return result;
@Override
public boolean isTransformedValueATupleElement(String[] aliases, int tupleLength)
return false;
/**
* Serialization hook for ensuring singleton uniqueing.
*
* @return The singleton instance : @link #INSTANCE
*/
private Object readResolve()
return INSTANCE;
Con este transformador puedes usar la solución de Ryiad con Hibernate:
Query jpaQuery = entityManager.createNativeQuery(queryString);
org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)jpaQuery).getHibernateQuery();
hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List
Aquí puedes ver las reseñas y valoraciones de los usuarios
Recuerda dar difusión a esta reseña si si solucionó tu problema.