Поиск…


Список с использованием ограничений

Предполагая, что у нас есть таблица TravelReview с названиями городов в качестве столбца "title"

 Criteria criteria =
    session.createCriteria(TravelReview.class);
  List review =
    criteria.add(Restrictions.eq("title", "Mumbai")).list();
  System.out.println("Using equals: " + review);

Мы можем добавить ограничения к критериям, связав их следующим образом:

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

Использование прогнозов

Если мы хотим получить только несколько столбцов, мы можем использовать класс Projections для этого. Например, следующий код извлекает столбец заголовка

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

Использовать фильтры

@Filter используется как лагерь WHERE , вот некоторые примеры

Студенческая организация

@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 */
}

Учебное предприятие

@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 */
}

Студенческая студия

@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 */
}

Таким образом, каждый раз, когда включен «активный» фильтр,

-Каждый запрос, который мы делаем в студенческом суде, вернет ВСЕХ студентов ТОЛЬКО их state = true исследования

-Каждый запрос, который мы делаем на учебном объекте, вернет ВСЕ state = true исследования

-Каждый запрос, который мы делаем на StudentStudy entiy, будет возвращать ТОЛЬКО те, у которых state = true отношение исследования

Обратите внимание, что study_id - это имя поля в таблице sql StudentStudy



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow