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();
}