Su pregunta es ambigua: en el primer párrafo, desea hacer referencia a las columnas por índice y, en el segundo, por el nombre sql. Dado que por índice es fácil, lo asumiré por mi nombre.
En primer lugar, puede utilizar el método doWork
acceder a la conexión JDBC subyacente y manejarlo como lo haría con pura JDBC:
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
connection.prepareStatement(...
}
});
O bien, puede utilizar query.getReturnAliases
que devuelve un String[]
de la columna nombres. Para effciency, probablemente construiría un Map
de alias para indexar y luego puedes hacer algo como result[map.get("column name")]
.
Pero en realidad, Hibernate maneja las claves compuestas con bastante facilidad cuando se utilizan asignaciones de xml (no se han intentado con las anotaciones). Hay un poco más de trabajo por adelantado y hay algunos problemas con las relaciones complejas (principalmente cuando los nombres de las claves externas no coinciden), pero una vez que crea la clase de id y la correlaciona, puede seguir con HQL/Criterios y obtener todos los beneficios de la carga diferida, se une simple, comprobación sucia, etc.
Por cierto, tengo una consulta sql en el formulario "select table1.price as price1 from ..." y por alguna razón el AliasToEntityMapResultTransformer no está mapeando precio1. Si lo hago, "select (table1.precio * 1) como precio1 desde ... "funciona, así que creo que encontré un error en el transformador ... – Ricardo
Recuerde agregar declaraciones' addScalar' (por ejemplo 'query.addScalar (" myAlias ", IntegerType.INSTANCE) '). De lo contrario, puede obtener alias incorrectos (por ejemplo, convertido a mayúsculas) o tipos de datos incorrectos. –
De alguna manera tengo que agregar esta importación para que funcione: import org.hibernate.transform.AliasToEntityMapResultTransformer – ian0411