2011-11-09 161 views
1

我有三個實體:日誌,員工和代理休眠條件進行搜索,通過多個實體

登錄了多對一關聯員工有多對一關聯機構

DetachedCriteria criteria = DetachedCriteria.forClass(Log.class); 

if (StringUtils.isNotBlank(c.getName())) { 
     criteria.createAlias("employee", "e").add(Restrictions.ilike("e.name", "%" + c.getName() + "%")); 
    } 
if (StringUtils.isNotBlank(c.getAgency())) { 
     criteria.createAlias("employee", "e").createAlias("agency", "a").add(Restrictions.ilike("e.a.name", "%" + c.getAgency() + "%")); 
     } 

員工

上述工作爲員工姓名,但它不適用於代理商名稱。

我得到下面的錯誤:

Exception: org.hibernate.QueryException: could not resolve property: agency of: com.example.Log 

所有的例子我發現只有去下一層。有人能指點我的資源,告訴我如何導航更低?

回答

3

試試下面的代碼

DetachedCriteria criteria = DetachedCriteria.forClass(Log.class); 
criteria.createAlias("employee", "e"); 

if (StringUtils.isNotBlank(c.getName())) { 
    criteria.add(Restrictions.ilike("e.name", c.getName(), MatchMode.ANYWHERE)); 
} 

if (StringUtils.isNotBlank(c.getAgency())) { 
    criteria.createAlias("e.agency", "a"); // <=========== 
    criteria.add(Restrictions.ilike("a.name", c.getAgency(), MatchMode.ANYWHERE)); 
} 
+0

這兩個答案的工作,但我最終會因爲吸塵器演示的這條路線。非常感謝你。 – Risu

3

第二個應該像這樣工作:

criteria.createAlias("employee", "e").createAlias("e.agency","a") 
      .add(Restrictions.ilike("a.name", "%" + c.getAgency() + "%"));