Sono un principiante con Hibernate e sto scrivendo un metodo semplice per restituire un elenco di oggetti che corrispondono a un filtro specifico. List<Foo>
sembrava un tipo di ritorno naturale.
Qualunque cosa faccia, non riesco a rendere felice il compilatore, a meno che non ne utilizzi un brutto @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();
}
}
Vorrei sbarazzarmeneSuppressWarnings
. Ma se lo faccio, ricevo l'avvertimento
Warning: Unchecked cast from List to List<Foo>
(Posso ignorarlo, ma vorrei non ottenerlo in primo luogo) e se rimuovo il generico per conformarmi al .list()
tipo restituito, ottengo l'avvertenza
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
Ho notato che org.hibernate.mapping
fa dichiarare unList
; ma è un tipo completamente diverso - Query
restituisce a java.util.List
, come tipo grezzo. Trovo strano che un Hibernate recente (4.0.x) non implementa i tipi parametrizzati, quindi sospetto che sia io invece a fare qualcosa di sbagliato.
Sembra molto simile risultato di Cast Hibernate a un elenco di oggetti , ma qui non ho errori "difficili" (il sistema conosce il tipo Foo e non sto usando una SQLQuery ma una semplice Query). Quindi nessuna gioia.
Ho anche esaminato l' eccezione di Hibernate Class Cast poiché sembrava promettente, ma poi mi sono reso conto di no realtà ricevo Exception
... il mio problema è solo quello di un avvertimento - uno stile di codifica, se vuoi.
La documentazione su jboss.org, i manuali di Hibernate e diversi tutorial non sembrano trattare l'argomento in modo così dettagliato (o non ho cercato nei posti giusti?). Quando entrano nei dettagli, usano il casting al volo - e questo su tutorial che non erano sul sito ufficiale jboss.org, quindi sono un po 'diffidente.
Il codice, una volta compilato, funziona senza problemi apparenti ... che io sappia ... ancora; ei risultati sono quelli attesi.
Quindi: lo sto facendo bene? Mi manca qualcosa di ovvio? Esiste un modo "ufficiale" o "consigliato" per farlo ?