Usando @SuppressWarnings
todas partes, como se sugiere, es una buena manera de hacerlo, a pesar de que no implican un poco de dedo de escribir cada vez que llame q.list()
.
Hay otras tres técnicas me gustaría sugerir:
Collections.checkedList()
reemplazar su asignación con esto:
List<Cat> cats = Collections.checkedList(q.list(), Cat.class);
Es posible que desee comprobar la javadoc for that method, especialmente con respecto a equals
y hashCode
.
Escribir un elenco-helper
Simplemente refactorizar toda su @SuppressWarnings
en un solo lugar:
List<Cat> cats = MyHibernateUtils.listAndCast(q);
...
public static <T> List<T> listAndCast(Query q) {
@SuppressWarnings("unchecked")
List list = q.list();
return list;
}
Prevenir Eclipse desde la generación de advertencias para los problemas inevitables
En Eclipse, vaya a Ventana> Preferencias> Java> Compilador> Errores/Advertencias y en Tipo genérico, seleccione la casilla de verificación Ignore unavoidable generic type problems due to raw APIs
Esto desactivará las advertencias innecesarias para problemas similares a los descritos anteriormente que son inevitables.
Algunos comentarios:
- me eligieron para pasar en el
Query
en lugar del resultado de q.list()
porque de esa manera este método "trampa" sólo se puede utilizar para hacer trampa con Hibernate, y no para hacer trampa cualquier List
en general.
- Se podría añadir métodos similares para
.iterate()
etc.
Vale la pena mencionar que con JPA puede tener consultas de tipo seguro al agregar el tipo a createQuery. –
Un poco tarde pero 'sess.createQuery (" de Cat cat ", Cat.class);' como mencionó Elazar. –
@Dommel Hmm, 5 años pueden ser más que un poco tarde :). Espero que todavía no haya trabajado en él – cowls