webentwicklung-frage-antwort-db.com.de

Wann werden Hibernate-Projektionen verwendet?

Ich bin etwas verwirrt über Hibernates Projektionen und Kriterien. Wann sollten Projektionen und wann Kriterien verwendet werden?

Bitte hilf mir. Vielen Dank!

40
reddy

Sie schließen sich nicht gegenseitig aus, Sie können beide gleichzeitig verwenden. Projektionen werden im Allgemeinen im Kontext einiger Kriterien verwendet.

Vereinfacht ausgedrückt werden Ruhezustand-Projektionen verwendet, um nur eine Teilmenge der Attribute einer Entität oder Gruppe von Entitäten abzufragen, die Sie mit Kriterien abfragen. Sie können Projections auch verwenden, um distinct -Klauseln und Aggregatfunktionen wie max, sum usw. anzugeben. Es ist so, als würde man sich auf beziehen, welche Daten Sie abrufen. Wie das Ändern der select -Klausel in einer SQL-Abfrage.

Ruhezustand-Kriterien werden verwendet, um Bedingungen zu definieren, die die Daten erfüllen müssen, um ausgewählt zu werden. Es ist so, als würde man sich auf beziehen, wie die Daten sind, die Sie abrufen. Wie das Ändern der Klauseln from und where einer SQL-Abfrage.

Beachten Sie, dass dies wie und was nicht genau stimmt, es ist nur ein Orientierung zur Unterstützung des OP. Sie können ändern, welche Daten Sie zum Beispiel mit createCriteria(String associationPath) abrufen.

Ich würde vorschlagen, einen Blick auf diesen Artikel zu werfen Ruhezustand: Kriterienabfragen im Detail

82
Xavi López

Projektionen werden verwendet, um Aggregatoperationen auszuführen und eine Einzelspaltenabfrage zu erhalten. Mit Einschränkungen können wir jedoch auf eine [~ # ~] Zeile [~ # ~] zugreifen mit PROJECTIONS können wir auf die ganze [~ # ~] Spalte [~ # ~] zugreifen

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();
    }
}

Im obigen Beispiel habe ich einen Projektionsaufruf verwendet, um den Kriterien eine Projektionseigenschaft "name" hinzuzufügen. Es gibt winchester winchester winchester winchester zurück, welches die lastName [~ # ~] Spalte [~ # ~] in der Tabelle ist.

Ausgabe =

Ruhezustand: Wählen Sie this_.last_name als y0_ von student this_ winchester winchester winchester winchester

Hinweis - Wir können nur eine Projektion hinzufügen, wenn wir mehr als eine Projektion hinzufügen. Die vorherige wird überschrieben. Wenn Sie mehr als eine Projektion hinzufügen möchten, brauchen Sie keine ProjectionList-Klasse

Originaltabelle -

enter image description here

2
Rishabh Jain