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() + "%"));
两个答案都有效,但我最终选择了这条路线,因为更简洁的演示文稿。非常感谢。两个答案都有效,但我最终选择了这条路线,因为更简洁的演示文稿。非常感谢。