一尘不染

Hibernate-createCriteria或createAlias?

hibernate

如果我要搜索参加“数学”课程且“约翰”是他的小组的学生:

应该使用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?我认为船boat是一样的…


阅读 266

收藏
2020-06-20

共1个答案

一尘不染

在当前版本的Hibernate和NHibernate中,CreateAlias和CreateCriteria 相同
。唯一的区别是,CreateCriteria在没有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"));
2020-06-20