hibernate - createCriteria 还是 createAlias?
如果我想搜索那些上“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"));
如何将子查询1和子查询2与初始条件放在一起?
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?我觉得船都是一样的...
If I want to search those students who take class "Math" and "John" is his group:
shoud I use createCriteria or 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"));
how to put subquery1 and subquery2 together with initial criteria?
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"));
When to use createCriteria and when createAlias? I think the boath are the same...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
CreateAlias 和 CreateCriteria 在当前版本的 Hibernate 和 NHibernate 中相同。唯一的区别是 CreateCriteria 有 2 个不带别名参数的附加重载。
想必它们在旧版本中有所不同,但任何差异早已不复存在。
别名可以根据另一个别名来定义,因此您的第一个示例可以写为:
CreateAlias and CreateCriteria are identical in the current versions of Hibernate and NHibernate. The only difference being that CreateCriteria has 2 additional overloads without the alias parameter.
Presumably they were different in a older version, but any differences are long gone.
An alias can be defined in terms of another alias, so your first example can be written as:
添加 xavierzhoa 的答案:
实际上,如果您链接
Criteria
方法,您会注意到这两种方法之间存在很大差异。使用createAlias
时,您将继续处理原始Criteria
对象,而使用createCriteria
时,您将处理更加嵌套的范围。考虑一下:
与
但是,如果您始终分配并使用别名,您将能够解决差异。喜欢:
Adding to xavierzhoa's answer:
There is actually quite a big difference between the two methods which you will notice if you chain
Criteria
methods. You will continue to work on the originalCriteria
object when usingcreateAlias
, whereas you work on a more nested scope when usingcreateCriteria
.Consider this:
versus
However, if you always assign and use an alias you will be able to work around the difference. Like:
请参考以下Hibernate源代码
Please refer to the following source code from the Hibernate
使用导入文件而不是编写(Jointype)
instead of writing (Jointype) use the import file as