如果我要搜索参加“数学”课程且“约翰”是他的小组的学生:
应该使用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是一样的…
在当前版本的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"));