0

Having a query as:

@Override
    public Collection<? extends String> getLocalizadoresMigradoSolr(
        Set<Integer> idEventosSet, Set<Integer> idSesionSet, Set<Integer> idCanalSet, Set<Integer> idPuntoVentaSet,
        Set<Integer> idTerminalSet, Set<Integer> idMetodoEntregaSet, Set<Integer> idTipoProductoSet) {
    StringBuilder query = new StringBuilder();
    query.append("SELECT DISTINCT(orden.localizador) ");
    query.append("FROM ob_compras.compras_datos_orden orden ");
    query.append("INNER JOIN ob_compras.compras_producto_orden producto ON producto.idOrden = orden.idOrden ");
    query.append("WHERE ");
    query.append("producto.idSesion IN(?)");
    query.append(" OR ");
    query.append(" producto.idEvento IN(?)");
    query.append(" OR");
    query.append(" orden.idCanal IN(?)");
    query.append(" OR");
    query.append(" orden.idPuntoVenta IN(?) ");
    query.append("OR ");
    query.append("orden.idTerminal IN(?)");
    query.append(" OR");
    query.append(" orden.metodoEntrega IN(?)");
    query.append(" OR");
    query.append(" orden.metodoEntrega IN(?)");

    List<String> result = jdbcTemplate.queryForList(query.toString(), String.class, idSesionSet, idEventosSet, idCanalSet,
            idPuntoVentaSet, idTerminalSet, idMetodoEntregaSet, idTipoProductoSet);
    return result;
}

I'm getting:

SELECT DISTINCT(orden.localizador) FROM ob_compras.compras_datos_orden orden INNER JOIN     ob_compras.compras_producto_orden producto ON producto.idOrden = orden.idOrden WHERE     producto.idSesion IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?    @\0\0\0\0\0\0x') OR  producto.idEvento IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x') OR orden.idCanal IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x') OR orden.idPuntoVenta IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x') OR orden.idTerminal IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x') OR orden.metodoEntrega IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x') OR orden.metodoEntrega IN(_binary'¬í\0sr\0java.util.HashSetºD…•–¸·4\0\0xpw\0\0\0?@\0\0\0\0\0\0x');

Why sets are been serialized? It should filling dynamic values on sql query but it does't. Instead, if serializing all parameters sets and becaming an slow and ugly query.

Ignasi
  • 5,887
  • 7
  • 45
  • 81

1 Answers1

2

The sets and array aren't supported. Use namedParameterJdbcTemplate instead

See

How to use SELECT IN clause in JDBCTemplates?

and

http://forum.spring.io/forum/spring-projects/data/43428-in-clause-with-jdbctemplate

Community
  • 1
  • 1
StanislavL
  • 56,971
  • 9
  • 68
  • 98