如果我想搜索那些上"Math“课程的学生,"John”是他的组:
我应该使用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是一样的..。
发布于 2010-02-28 02:22:43
在当前版本的Hibernate和CreateCriteria中,CreateAlias和CreateCriteria是相同的。唯一的区别是CreateCriteria在没有别名参数的情况下有两个额外的重载。
想必它们在旧版本中是不同的,但任何差异都已经消失得无影无踪了。
别名可以用另一个别名来定义,因此您的第一个示例可以写成:
// 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"));发布于 2015-04-28 20:46:43
补充一下xavierzhoa的答案:
如果你链接Criteria方法,你会注意到这两个方法之间有很大的不同。在使用createAlias时,您将继续处理原始的Criteria对象,而在使用createCriteria时,您将处理更嵌套的作用域。
请考虑以下内容:
Criteria c = getSession()
.createCriteria(YourEntity.class)
.createCriteria("someMember", "s")
.add(Restrictions.eq("name", someArgument)); // checks YourEntity.someMember.name对比
Criteria c = getSession()
.createCriteria(YourEntity.class)
.createAlias("someMember", "s")
.add(Restrictions.eq("name", someArgument)); // checks YourEntity.name但是,如果您总是分配和使用别名,您将能够解决这一差异。像这样:
Criteria c = getSession()
.createCriteria(YourEntity.class, "y")
.createAlias("someMember", "s")
.add(Restrictions.eq("y.name", someArgument)); // no more confusion发布于 2013-01-21 20:58:48
请参考Hibernate中的以下源代码
public Criteria createCriteria(String associationPath, String alias, int joinType) {
return new Subcriteria( this, associationPath, alias, joinType );
}
public Criteria createAlias(String associationPath, String alias, int joinType) {
new Subcriteria( this, associationPath, alias, joinType );
return this;
}https://stackoverflow.com/questions/2347359
复制相似问题