Votre question est ambiguë - dans le premier paragraphe, vous voulez faire référence aux colonnes par index et dans la seconde, par nom de SQL. Puisque l'index est facile, je vais supposer par son nom.
Tout d'abord, vous pouvez utiliser la méthode doWork
pour accéder à la connexion JDBC sous-jacente et de traiter comme vous le feriez avec JDBC pur:
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
connection.prepareStatement(...
}
});
Ou, vous pouvez utiliser query.getReturnAliases
qui retourne une String[]
de la colonne des noms. Pour l'effcacité, je construirais probablement un Map
d'alias à indexer et alors vous pouvez faire quelque chose comme result[map.get("column name")]
. Mais en réalité, Hibernate gère assez facilement les touches composites lors de l'utilisation des mappages xml (pas essayé avec les annotations). C'est un peu plus de travail à l'avance et il y a quelques problèmes avec des relations complexes (principalement lorsque les noms/intervalles de clés étrangers ne correspondent pas), mais une fois que vous créez la classe d'id, vous pouvez la faire avec HQL/Criteria et obtenir tous les avantages de chargement paresseux, jointures simples, la vérification sale, etc.
btw, j'ai une requête sql sous la forme "select table1.price as price1 from ..." et pour une raison quelconque, le AliasToEntityMapResultTransformer n'est pas mappage price1. Si je fais "select (table1.prix * 1) comme prix1 à partir de ... "ça fonctionne donc je pense avoir trouvé un bug dans le transformateur .. – Ricardo
N'oubliez pas d'ajouter des déclarations' addScalar' (par exemple 'query.addScalar (" myAlias ", IntegerType.INSTANCE) Sinon, vous risquez d'obtenir des alias incorrects (par exemple convertis en majuscules) ou des types de données incorrects –
D'une certaine manière, je dois ajouter cette importation pour que cela fonctionne: import org.hibernate.transform.AliasToEntityMapResultTransformer – ian0411