Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate条件搜索多个实体_Java_Hibernate_Hibernate Criteria - Fatal编程技术网

Java hibernate条件搜索多个实体

Java hibernate条件搜索多个实体,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我有三个实体:日志、员工和代理 使用多对一关联登录到员工 与机构有多对一关联的员工 DetachedCriteria criteria = DetachedCriteria.forClass(Log.class); if (StringUtils.isNotBlank(c.getName())) { criteria.createAlias("employee", "e").add(Restrictions.ilike("e.name", "%" + c.getName() + "

我有三个实体:日志、员工和代理

使用多对一关联登录到员工

与机构有多对一关联的员工

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
我找到的所有例子都只涉及一个层次。有人能给我指一下告诉我如何向下导航的资源吗?

试试下面的代码

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));
}
DetachedCriteria=DetachedCriteria.forClass(Log.class);
标准。createAlias(“员工”、“e”);
if(StringUtils.isNotBlank(c.getName())){
添加(Restrictions.ilike(“e.name”,c.getName(),MatchMode.ANYWHERE));
}
if(StringUtils.isNotBlank(c.getAgency())){
createAlias(“e.agency”、“a”);//请尝试以下代码

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));
}
DetachedCriteria=DetachedCriteria.forClass(Log.class);
标准。createAlias(“员工”、“e”);
if(StringUtils.isNotBlank(c.getName())){
添加(Restrictions.ilike(“e.name”,c.getName(),MatchMode.ANYWHERE));
}
if(StringUtils.isNotBlank(c.getAgency())){

criteria.createAlias(“e.agency”、“a”);//第二个应该是这样工作的:

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

第二个应该是这样的:

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

两个答案都有效,但我最终选择了这条路线,因为更简洁的演示文稿。非常感谢。两个答案都有效,但我最终选择了这条路线,因为更简洁的演示文稿。非常感谢。