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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow