Tuto Hibernate - Dans cet article, nous voyons comment ramener plusieurs champs mais pas tous.
Nous avons vu dans l’article « Les requêtes avec Hibernate 4 » comment réaliser une requête ramenant soit un champ soit tous les champs (SELECT *). Voyons à présent comment ramener plusieurs champs mais pas tous.
Le code côté Hibernate
Pour ce faire, nous avons recours à la fonction multiselect() de la classe CriteriaQuery. Cette fonction prend en paramètres soit une List de champs, soit n paramètres représentant des champs ou des fonctions.
Par exemple, si je souhaite récupérer une liste des noms et prénoms des utilisateurs d’une application, je pourrais avoir le code suivant :
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<
Tuple> criteriaQuery = builder.createQuery(Tuple.class);
Root<
Utilisateur> root = criteriaQuery.from(Utilisateur.class);
criteriaQuery.multiselect(root.get(Utilisateur_.nom), root.get(Utilisateur_.prenom));
TypedQuery<
Tuple> typedQuery = entityManager.createQuery(criteriaQuery);
List<
Tuple> result = typedQuery.getResultList();
Ici, on peut constater que le type de la CriteriaQuery ainsi que celui de la TypedQuery est javax.persistence.Tuple. En effet, étant donné que nous effectuons une sélection de champs customisée, cela ne correspond à aucune Entity mappée par Hibernate. On récupérera donc une liste de Tuple qui, comme leur nom l’indique, contiennent chacun autant de valeurs que l’on en a spécifié dans le multiselect.
L’exploitation des résultats
Nous avons à présent une liste de Tuples dont nous souhaitons extraire les données. En reprenant l’exemple précédent, mettons que je souhaite à présent construire une liste de String dont les éléments sont la concaténation du prénom et du nom des utilisateurs trouvés. On peut donc avoir le code suivant :
List<
Tuple> utilisateurs = new ArrayList<
Tuple>();
StringBuilder builder = null;
for(Tuple tuple:result) {
if(tuple != null) {
builder = new StringBuilder();
if(tuple.get(1)Â != null) {
builder.append((String)tuple.get(1));
}
if(tuple.get(0)Â != null) {
if(builder.length() > 0) {
builder.append(" ");
}
builder.append((String)tuple.get(0));
}
if(builder.length() > 0) {
utilisateurs.add(builder.toString());
}
}
}
Vous constaterez qu’il est nécessaire de caster chaque valeur récupérée, la méthode get(int) de Tuple retournant un Object. Une variante consiste à passer la classe désirée en paramètre : c’est alors la méthode get(int, Class) qui se charge de réaliser le cast. De plus, on ne saurait trop conseiller de tester la nullité de chaque valeur : en effet, ce n’est pas parce que get(0) ne propage pas d’ArrayIndexOutOfBoundException qu’il ne renvoie pas null.
Dans cet article, nous allons plonger dans le monde d'Hibernate 6, en commençant par reprendre les bases d’Hibernate et ses principaux concepts. Nous explorerons ensuite les nouveautés et les améliorations apportées par Hibernate 6.
Face à l'explosion des coûts liés au cloud public, une nouvelle discipline s'impose : le FinOps. Dans un contexte où les entreprises adoptent massivement les infrastructures cloud pour leur flexibilité et leur scalabilité, les mauvaises surprises sur la facture sont malheureusement devenues monnaie courante. Optimiser ses dépenses cloud n'est plus un luxe, mais une nécessité pour garantir la rentabilité des projets et maitriser ses budgets IT. Mais pas de panique ! Cet article vous dévoile tout ce que vous devez savoir sur le FinOps, ses principes clés, et les bonnes pratiques pour maîtriser vos coûts tout en tirant le meilleur parti de vos ressources cloud.
Parce que réussir son chiffrage, c’est à la fois s’assurer de payer son projet au prix juste et faire en sorte qu’il soit réalisé dans de bonnes conditions. On vous explique tout dans cet article