in method

    private Criteria buildPrefetchCriteria(Collection ids, String[] fkCols, String[] itemFkCols,
            FieldDescriptor[] itemPkFields)
        if (fkCols.length == 1) //bug is here
            return buildPrefetchCriteriaSingleKey(ids, fkCols[0], itemFkCols[0], itemPkFields[0]); //only first item's foreign key passed
            return buildPrefetchCriteriaMultipleKeys(ids, fkCols, itemFkCols, itemPkFields);


assumption that if parent table has the only foreign key then item table has the only FK too is incorrect.

<collection-descriptor name="recipients" element-class-ref="nVerge.commons.User"
auto-delete="link" auto-retrieve="true" auto-update="link"
 <fk-pointing-to-this-class column="hot_folder_id"/>
 <fk-pointing-to-element-class column="user_login"/>
 <fk-pointing-to-element-class column="user_network_id"/> <!-- this FK is not put into where criteria -->

Quickfix for this is  if (fkCols.length == 1 && itemFkCols.length == 1)