Hibernate条件查询难题

Hibernate条件查询难题,hibernate,criteria,restriction,Hibernate,Criteria,Restriction,我有一个带有一系列OneToMany关联的模式,其中层次结构是Farm->Field->RegionGroup->Region,需要能够根据Farm、Field和Region中的值进行查询。以下是简单的建筑工程 org.hibernate.Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Farm.class) .setResultTransformer(Criteria.DISTINCT_R

我有一个带有一系列OneToMany关联的模式,其中层次结构是Farm->Field->RegionGroup->Region,需要能够根据Farm、Field和Region中的值进行查询。以下是简单的建筑工程

org.hibernate.Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Farm.class)
  .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
  .add(Restrictions.in("id", farmIds))
  .createCriteria("fields").add(Restrictions.in("id", fieldIds))
  .createCriteria("regionGroups")
  .createCriteria("regions").add(Restrictions.in("nutrientId", nutrientIds));
return criteria.list();
然而,当我试图解释过滤器中提供的空列表时,限制不再适用,我得到一个包含每个农场、字段和区域的结果集。我确信这是一个对返回的标准实例进行排序的问题,但我正绞尽脑汁尝试不同的组合,结果一事无成。有人建议我保持理智吗

org.hibernate.Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Farm.class)
  .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
if (!farmIds.isEmpty()){
  criteria.add(Restrictions.in("id", farmIds));
}
org.hibernate.Criteria fieldCriteria = criteria.createCriteria("fields");
if (!fieldIds.isEmpty()){
  fieldCriteria.add(Restrictions.in("id", fieldIds));
}
if (!nutrientIds.isEmpty()){
  fieldCriteria.createCriteria("regionGroups")
    .createCriteria("regions").add(Restrictions.in("nutrientId", nutrientIds));
}
return criteria.list();

我不太明白。如果每个列表都是空的,那么您没有对您的条件应用任何限制,因此很明显,每个场都会返回。当所有列表都为空时,您希望返回什么?当然,如果每个筛选器列表都为空,我希望返回所有数据,但是,如果仅FieldID列表为空,例如,我仍然希望应用场和区域的限制。您可以发布Hibernate生成和执行的SQL吗?