【问题标题】:hibernate criteria search through multiple entities休眠条件搜索多个实体
【发布时间】:2011-11-09 23:42:49
【问题描述】:

我有三个实体:Log、Employee 和 Agency

记录与员工的多对一关联

与代理商具有多对一关联的员工

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

我找到的所有示例都只下降了一级。谁能给我指出一个告诉我如何向下导航的资源?

【问题讨论】:

    标签: java hibernate hibernate-criteria


    【解决方案1】:

    试试下面的代码

    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));
    }
    

    【讨论】:

    • 两个答案都有效,但由于更简洁的演示,我最终选择了这条路线。非常感谢。
    【解决方案2】:

    第二个应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多