быть в спящем режиме - createCriteria или createAlias?

Если я хочу искать тех студентов, которые посещают урок "Математика", и "John" является своей группой:

shoud я использую createCriteria или createAlias?

Criteria:

Criteria criteria = session.createCriteria(Student.class);
Criteria subquery1 = criteria.createCriteria("courses", course).add(Restrictions.eq(course.name, "Math"));
Criteria subquery2 = criteria.createCriteria("group", student).add(Restrictions.eq(student.name, "John"));

как поместить subquery1 и subquery2 вместе с начальными критериями?

Alias:

Criteria criteria = session.createCriteria(Student.class).
createAlias("courses", course).add(Restrictions.eq(course.name, "Math")).
createCriteria("group", student).add(Restrictions.eq(student.name, "John"));

Когда использовать createCriteria и когда createAlias? Я думаю, что boath являются тем же...

27
задан Lachlan Roche 27 February 2010 в 18:32
поделиться

1 ответ

CreateAlias ​​и CreateCriteria идентичны в текущих версиях Hibernate и NHibernate. Единственная разница в том, что CreateCriteria имеет 2 дополнительных перегрузки без параметра alias.

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

Псевдоним может быть определен в терминах другого псевдонима, поэтому ваш первый пример может быть записан как:

// Java
Criteria criteria = session.createCriteria(Student.class)
    .createAlias("courses", "course")
    .createAlias("course.group", "student")
    .add(Restrictions.eq("course.name", "Math"))
    .add(Restrictions.eq("student.name", "John"));

// C#
ICriteria criteria = session.CreateCriteria<Student>()
    .CreateAlias("Courses", "course")
    .CreateAlias("course.Group", "student")
    .Add(Restrictions.Eq("course.Name", "Math"))
    .Add(Restrictions.Eq("student.Name", "John"));
25
ответ дан 28 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: