45

Cuando no hay filas, tanto query.list() como criteria.list() devuelven la lista vacía en lugar de un valor nulo. ¿Cuál es la razón detrás de esto?el método hibernate query.list() devuelve la lista vacía en lugar del valor nulo

+0

¿por qué quieres null? Entiendo cuando consultas por un solo resultado: no encontrarlo tendría sentido para devolver nulo. ¡Pero list() siempre debe devolver una lista vacía! ¿Cuál es el significado de una lista nula? – ACV

Respuesta

86

La razón no es forzar comprobaciones nulas en el código del cliente, en coherencia con Effective Java 2nd Edition, artículo 43: Devolver matrices vacías o colecciones, no nulos.

Esto hace que el código del cliente sea más simple y menos propenso a errores (y muy probablemente la implementación del método también).

El idioma null-retorno es probable un vestigio del lenguaje de programación C, en que longitudes de matriz se devuelven por separado de las matrices reales. En C, no hay ninguna ventaja de para asignar una matriz si se devuelve cero como longitud.

+0

hmm ... pero incluso como está impidiendo los controles nulos, todavía tenemos que verificar el tamaño de la lista ... ¿no? y también como una buena práctica, siempre buscamos null también (al menos en nuestro equipo). – Reddy

+12

Ese es el punto: si está seguro (de acuerdo con las promesas de una API) de que un valor no puede ser nulo, entonces no busca nulo. Y no, no necesitas verificar el tamaño. Cuando itere la colección, saltará la iteración. – Bozho

+0

bien ... lo tengo. Si es un nulo y como cliente si no lo verifiqué, NPE puede cancelar mi aplicación. Pero si se trata de una colección vacía, simplemente omitiría la lógica y continuaría (ya que generalmente verificamos el tamaño de todos modos). Gracias Peter y Bozho. – Reddy

10

Es consistente: se devuelve una lista con todos los resultados, ya sea que los haya, o no.

Cuestiones relacionadas