hibernate
Kriterien und Projektionen
Suche…
Liste mit Einschränkungen
Angenommen, wir haben eine TravelReview-Tabelle mit Städtenamen als Spalte "Titel"
Criteria criteria =
session.createCriteria(TravelReview.class);
List review =
criteria.add(Restrictions.eq("title", "Mumbai")).list();
System.out.println("Using equals: " + review);
Wir können den Kriterien Einschränkungen hinzufügen, indem wir sie wie folgt verketten:
List reviews = session.createCriteria(TravelReview.class)
.add(Restrictions.eq("author", "John Jones"))
.add(Restrictions.between("date",fromDate,toDate))
.add(Restrictions.ne("title","New York")).list();
Projektionen verwenden
Wenn wir nur einige Spalten abrufen möchten, können Sie dazu die Klasse Projections verwenden. Mit dem folgenden Code wird beispielsweise die Titelspalte abgerufen
// Selecting all title columns
List review = session.createCriteria(TravelReview.class)
.setProjection(Projections.property("title"))
.list();
// Getting row count
review = session.createCriteria(TravelReview.class)
.setProjection(Projections.rowCount())
.list();
// Fetching number of titles
review = session.createCriteria(TravelReview.class)
.setProjection(Projections.count("title"))
.list();
Verwenden Sie Filter
@Filter
wird als WHERE
Camp verwendet, hier einige Beispiele
Studenteneinheit
@Entity
@Table(name = "Student")
public class Student
{
/*...*/
@OneToMany
@Filter(name = "active", condition = "EXISTS(SELECT * FROM Study s WHERE state = true and s.id = study_id)")
Set<StudentStudy> studies;
/* getters and setters methods */
}
Lerneinheit
@Entity
@Table(name = "Study")
@FilterDef(name = "active")
@Filter(name = "active", condition="state = true")
public class Study
{
/*...*/
@OneToMany
Set<StudentStudy> students;
@Field
boolean state;
/* getters and setters methods */
}
StudentStudy-Entität
@Entity
@Table(name = "StudentStudy")
@Filter(name = "active", condition = "EXISTS(SELECT * FROM Study s WHERE state = true and s.id = study_id)")
public class StudentStudy
{
/*...*/
@ManytoOne
Student student;
@ManytoOne
Study study;
/* getters and setters methods */
}
Auf diese Weise wird jedes Mal, wenn der "aktive" Filter aktiviert ist,
-Jede Abfrage, die wir an der Studenteneinheit durchführen, wird ALLE Studenten mit NUR ihrem state = true
Studien zurückgeben
-Jede Abfrage, die wir für die Study-Entität durchführen, gibt ALL state = true
Studien zurück
-Jede Abfrage, die wir an der StudentStudy-Entity durchführen, gibt NUR die mit einer state = true
Studienbeziehung zurück
Bitte beachten Sie, dass study_id der Name des Felds in der SQL StudentStudy-Tabelle ist