Se você aplicar a busca antecipada em seus mapeamentos de modelo, provavelmente resultará em entradas duplicadas retornadas por meio da consulta withCriteria . As duplicatas são causadas pelo Hibernate unindo internamente suas tabelas raiz e coleção. A solução alternativa é muito simples, basta adicionar Criteria.DISTINCT ROOT ENTITY ao fechamento withCriteria.
def objs = Model.withCriteria {
eq("field", value)
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
}
É uma boa prática evitar buscas rápidas em seus modelos – não use-o a menos que seja necessário.
ps como Ben apontou uniqueResult também funcionará se um único resultado for esperado.
pss, como Ben também apontou: também parece que você pode realizar o que deseja apenas fazendo createCriteria (). list {} em vez de withCriteria, pois o método de lista configura DISTINCT ROOT ENTITY.