1
resposta

Criteria enviando parametros com nvarchar(4000)

Bom dia, estou com um problema ao criar consultas com o criteria. As tabelas tem um atributo varchar(15) por exemplo, e um índice criado nesse atributo, mas quando faço uma busca usando o criteria, ele envia um parametro pra esse atributo com um nvarchar(4000) e com isso o índice não é utilizado. Por exemplo, o "numero" é um varchar(15) mas o parametro que o criteria enviou, foi um nvarchar(4000):

public RomaneioDTO obterDadosRomanioDTO(final String numero, final Long veiculoId, final Long idAmbiente) {

        final Criteria criteria = this.novoCriteria();

        criteria.createAlias("safra", "safra", JoinType.LEFT_OUTER_JOIN);

        criteria.createAlias("veiculo", "veiculo", JoinType.LEFT_OUTER_JOIN);

        criteria.createAlias("material", "material", JoinType.LEFT_OUTER_JOIN);

        criteria.createAlias("produtor", "produtor", JoinType.LEFT_OUTER_JOIN);

        if (UtilObjeto.isNotNull(numero)) {

            criteria.add(Restrictions.like("numero", numero, MatchMode.EXACT).ignoreCase());

        }
        if (UtilObjeto.isNotNull(veiculoId)) {

            criteria.add(Restrictions.eq("veiculo.id", veiculoId));

        }
        if (UtilObjeto.isNotNull(idAmbiente)) {

            criteria.add(Restrictions.eq("idAmbiente", idAmbiente));
        }
        criteria.add(Restrictions.eq("status", StatusRomaneioEnum.EM_PROCESSAMENTO));

        this.projectionRomaneioDTO(criteria);

        criteria.setResultTransformer(Transformers.aliasToBean(RomaneioDTO.class));

        criteria.setMaxResults(1);

        return (RomaneioDTO) criteria.uniqueResult();
    }
1 resposta

Oi Kaique,

Tente usar o atributo sql-type em seus mapeamentos:

<property name="numero" length="15" />
    <column sql-type="varchar(15)" />
</property>