使用hibernate ,都是会 自动为 表 建立别名的。java
若是连表查询的话, 就不知道 表的别名是什么了。sql
参考:app
使用的方法是sqlRestrictionui
criteria.add(Restrictions.sqlRestriction(" exists (select 1 from xxx as r where r.xxx = {alias}.xxx)")
{alias}会替换成entity建立criteria的alias..net
个人代码用例 StringBuilder sb = new StringBuilder(); sb.append(" EXISTS ( select 1 from eims_organization_auth as au where au.eims_org_id={alias}.id ) "); pageBean.addCriterion(Restrictions.sqlRestriction(sb.toString())); List<EimsOrganization> list = eimsOrganizationService.list(pageBean);
这样子 不少时候 连表的时候就能够 使用 {alias} 来 取代 原表的 别名了hibernate
参考:code
https://blog.csdn.net/ypp91zr/article/details/78076620blog
若是关联其余表 条件查询,不取别名的用法get
若是不取别名,只能匹配类型的id,就像这样:criteria.add(Restrictions.eq("airlineCompany.id", airlineCompanyId));it