Je suis un peu confus au sujet des projections et critères d'Hibernate. Quand utiliser les projections et quand utiliser les critères?
Aidez-moi, s'il vous plaît. Merci!
Ils ne s'excluent pas mutuellement, vous pouvez utiliser les deux en même temps. Les projections sont généralement utilisées dans le contexte de certains critères.
Pour faire simple, les projections Hibernate sont utilisées pour interroger uniquement un sous-ensemble des attributs d'une entité ou d'un groupe d'entités que vous interrogez avec des critères. Vous pouvez également utiliser Projections pour spécifier des clauses distinct
et des fonctions d'agrégation comme max
, sum
et ainsi de suite. C'est comme faire référence à quelles données vous récupérez. Comme la modification de la clause select
dans une requête SQL.
Les critères d'hibernation sont utilisés pour définir les conditions auxquelles les données doivent satisfaire pour être sélectionnées. C'est comme faire référence à comment sont les données que vous récupérez. Comme la modification des clauses from
et where
d'une requête SQL.
Notez que ceci comment et qui n'est pas strictement vrai, c'est juste un orientation visant à aider le PO. Vous pouvez modifier les données que vous récupérez avec createCriteria(String associationPath)
par exemple.
Je suggère de jeter un œil à cet article Hibernate: Criteria Queries in Depth
Les projections sont utilisées pour exécuter des opérations d'agrégation et pour obtenir une requête sur une seule colonne.Avec les restrictions, nous pouvons accéder à une ligne [~ # ~] [~ # ~] mais avec PROJECTIONS nous pouvons accéder à la colonne entière [~ # ~] [~ # ~]
EX -
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
Criteria c = session.createCriteria(Student.class);
Projection p = Projections.property("lastName");
List<String> students = c.setProjection(p).list();
for(String s:students)
System.out.println(s);
session.getTransaction().commit();
session.close();
} finally {
factory.close();
}
}
Dans l'exemple ci-dessus, j'ai utilisé l'appel de projection pour AJOUTER une propriété de projection "nom" aux critères. Il renvoie winchester winchester winchester winchester, qui est la colonne lastName [~ # ~] [~ # ~] dans le tableau.
Sortie =
Hibernate: sélectionnez this_.last_name as y0_ de l'étudiant this_ winchester winchester winchester winchester
Remarque - Nous ne pouvons ajouter qu'une seule projection, si nous ajoutons plus d'une projection, la précédente sera remplacée. si vous voulez ajouter plus d'une projection, vous nedd classe ProjectionList
Table d'origine -