After thinking about this well, this loop will lead to an undesirable behavior where hibernate will generate several AND clauses for each map type in the loop which will mean if you have no match on the first map type, then you will never get any matches at all on subsequent map types in the list since the generated query will just have an extra and clause added to it, makes sense? The logic needs to rebuild/reset the criteria object to get rid of the previous restrictions added for the map type we just looped past.