Pareix ser que certes BBDD no suporten més de mil elements dins dels camps "IN" aplicar el workaround que es va fe rper PORTAFIB.
A més en el cas de més de 1000 elements escriure un log avisant que es millori aquest sistema ja que una consulta IN amb més de 1000 elements no es eficient.
/**
* Workaround per https://github.com/GovernIB/genapp/issues/39
* Crea una Where de tipus IN dividida en blocs de màxim 1000.
* @param field camp a emprar
* @param values llista de valors a comprovar dins l'IN
* @return un where que el camp field està dins values.
*/
public static <C> Where getSafeWhereIn(Field<C> field, List<C> values) {
final int MAX_IN_SIZE = 1000;
Where whereIn;
if (values.size() < MAX_IN_SIZE) {
whereIn = field.in(values);
} else {
int iterations = ((values.size() - 1) / MAX_IN_SIZE) + 1;
Where[] wheresIn = new Where[iterations];
for (int i = 0; i < iterations; i++) {
int firstIndex = i * MAX_IN_SIZE;
int lastIndex = Math.min(firstIndex + MAX_IN_SIZE, values.size());
wheresIn[i] = field.in(values.subList(firstIndex, lastIndex));
}
whereIn = Where.OR(wheresIn);
}
return whereIn;
}
Pareix ser que certes BBDD no suporten més de mil elements dins dels camps "IN" aplicar el workaround que es va fe rper PORTAFIB.
A més en el cas de més de 1000 elements escriure un log avisant que es millori aquest sistema ja que una consulta IN amb més de 1000 elements no es eficient.