Подтвердить что ты не робот

Когда использовать прогнозы Hibernate?

Меня немного смущают прогнозы и критерии Hibernate. Когда использовать прогнозы и когда использовать критерии?

4b9b3361

Ответ 1

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

Проще говоря, Hibernate Projections используются для запроса только подмножества атрибутов объекта или группы объектов, которые вы запрашиваете с помощью критериев. Вы также можете использовать Projections для указания предложений distinct и агрегатных функций, таких как max, sum и т.д. Это похоже на , которые данные вы извлекаете. Как изменение предложения select в запросе SQL.

Критерии спящего режима используются для определения условий, которые должны удовлетворять данные для выбора. Это похоже на , как - данные, которые вы извлекаете. Подобно модификации предложений from и where SQL-запроса.

Обратите внимание, что это как и , которое не является строго истинным, это просто ориентация, направленная на помощь OP. Вы можете изменить какие данные, которые вы извлекаете с помощью createCriteria(String associationPath), например.

Я бы предложил взглянуть на эту статью Спящий режим: критерии запросов в глубину

Ответ 2

Проекции используются для выполнения агрегатных операций и для получения запроса в один столбец. С помощью Ограничений мы можем получить доступ к ROW, но с помощью ПРОЕКТОВ мы можем получить доступ ко всей КОЛОННЕ

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

В приведенном выше примере я использовал вызов projection для ADD свойства критерия "name" для критериев. Возвращает Винчестер Винчестер Винчестер Винчестер, который является последним именем КОЛОННА в таблице.

Выход =

Hibernate: выберите this_.last_name как y0_ из студента this_ Винчестер Винчестер Винчестер винчестер

Примечание - Мы можем добавить только одну проекцию, если мы добавим более 1 проекции, предыдущая будет переопределена. если вы хотите добавить более одной проекции, вам понадобится класс ProdList

Оригинальный стол -

enter image description here

Ответ 3

Проецирование - это интерфейс, указанный в пакете "org.hibernate.criterion", Projections - это класс, заданный в одном пакете, на самом деле Projection - это интерфейс, а Projections - это класс и factory для создания проекционных объектов.

В классе Projections мы имеем все статические методы, и каждый метод этого класса возвращает объект интерфейса Projection.

Если мы хотим добавить объект Projection к критериям, нам нужно вызвать метод setProjection()

Помните, что при добавлении проекционного объекта к критериям можно добавить один объект за раз. Это означает, что если мы добавим второй проекционный объект, то этот второй будет переопределять первый (первый из них не будет работать), поэтому за один раз мы можем только один проекционный объект к объекту критериев

Используя критерии, если мы хотим загрузить частичный объект из базы данных, нам нужно создать объект проекции для свойства, которое должно быть загружено из базы данных

Criteria crit = session.createCriteria(Products.class);
crit.setProjection(Projections.proparty("proName"));
List l=crit.list();
Iterator it=l.iterator();
while(it.hasNext())
{
    String s = (String)it.next();
    // ---- print -----
}

Если мы добавим несколько проекций к критериям, то последний добавленный прогноз будет рассмотрен для выполнения см....

Criteria crit = session.createCriteria(Products.class);

Projection p1 = Projection.property("proName");
Projection p2 = Projection.property("price");

crit.setProjection(p1):
crit.setProjection(p2):
List l=crit.list();