web-dev-qa-db-fra.com

Quand utiliser les projections Hibernate?

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!

40
reddy

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

82
Xavi López

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 -

enter image description here

2
Rishabh Jain