Resultados duplicados com Critério

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.