Sou um novato no Hibernate e estou escrevendo um método simples para retornar uma lista de objetos que correspondem a um filtro específico. List<Foo>
parecia um tipo de retorno natural.
Faça o que fizer, não consigo deixar o compilador feliz, a menos que eu use um feio @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();
}
}
Eu gostaria de me livrar dissoSuppressWarnings
. Mas se eu fizer isso, recebo o aviso
Warning: Unchecked cast from List to List<Foo>
(Posso ignorá-lo, mas gostaria de não obtê-lo em primeiro lugar), e se eu remover o genérico para estar em conformidade com o .list()
tipo de retorno, recebo o aviso
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
Notei que org.hibernate.mapping
faz declarar um List
; mas é um tipo totalmente diferente - Query
retorna a java.util.List
, como um tipo bruto. Acho estranho que um Hibernate (4.0.x) recente não implementasse tipos parametrizados, então suspeito que sou eu fazendo algo errado.
Parece muito com o resultado do Cast Hibernate para uma lista de objetos , mas aqui não tenho nenhum erro "difícil" (o sistema conhece o tipo Foo, e não estou usando um SQLQuery, mas uma consulta direta). Portanto, nenhuma alegria.
Também examinei Hibernate Class Cast Exception, pois parecia promissor, mas então percebi que não recebo nenhum Exception
... meu problema é apenas um aviso - um estilo de codificação, se preferir.
A documentação no jboss.org, os manuais do Hibernate e vários tutoriais parecem não cobrir o tópico com tantos detalhes (ou não pesquisei nos lugares certos?). Quando eles entram em detalhes, eles usam fundição instantânea - e isso em tutoriais que não estavam no site oficial jboss.org, então estou um pouco desconfiado.
O código, uma vez compilado, é executado sem nenhum problema aparente ... que eu saiba ... ainda; e os resultados são os esperados.
Então: estou fazendo certo? Estou perdendo algo óbvio? Existe uma maneira "oficial" ou "recomendada" de fazer isso ?