使用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