Soy un novato con Hibernate y estoy escribiendo un método simple para devolver una lista de objetos que coinciden con un filtro específico. List<Foo>
parecía un tipo de retorno natural.
Haga lo que haga, parece que no puedo hacer feliz al compilador, a menos que emplee un archivo feo @SuppressWarnings
.
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class Foo {
public Session acquireSession() {
// All DB opening, connection etc. removed,
// since the problem is in compilation, not at runtime.
return null;
}
@SuppressWarnings("unchecked") /* <----- */
public List<Foo> activeObjects() {
Session s = acquireSession();
Query q = s.createQuery("from foo where active");
return (List<Foo>) q.list();
}
}
Me gustaría deshacerme de esoSuppressWarnings
. Pero si lo hago, recibo la advertencia
Warning: Unchecked cast from List to List<Foo>
(Puedo ignorarlo, pero me gustaría no obtenerlo en primer lugar), y si elimino el genérico para cumplir con el .list()
tipo de retorno, aparece la advertencia
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
Noté que org.hibernate.mapping
hace declarar List
; pero es un tipo completamente diferente: Query
devuelve a java.util.List
, como tipo sin formato. Me parece extraño que un Hibernate reciente (4.0.x) no implemente tipos parametrizados, así que sospecho que soy yo, en cambio, haciendo algo mal.
Se parece mucho al resultado de Cast Hibernate a una lista de objetos , pero aquí no tengo errores "duros" (el sistema conoce el tipo Foo, y no estoy usando una SQLQuery sino una consulta directa). Así que no hay alegría.
También he analizado la excepción de conversión de clase de Hibernate, ya que parecía prometedor, pero luego me di cuenta de que en realidad no obtengo ninguna Exception
... mi problema es solo una advertencia, un estilo de codificación, por así decirlo.
La documentación en jboss.org, los manuales de Hibernate y varios tutoriales no parecen cubrir el tema con tanto detalle (¿o no busqué en los lugares correctos?). Cuando entran en detalles, usan la transmisión sobre la marcha, y esto en tutoriales que no estaban en el sitio oficial jboss.org, así que soy un poco cauteloso.
El código, una vez compilado, se ejecuta sin problema aparente ... que yo sepa ... todavía; y los resultados son los esperados.
Entonces: ¿estoy haciendo esto bien? ¿Me estoy perdiendo algo obvio? ¿Existe una forma "oficial" o "recomendada" de hacerlo ?