2015-04-16 7 views
7

Im ottenere sempre un avviso di sicurezza del tipo quando si desidera avviare un'applicazione Hibernate. C'è un metodo per sbarazzarsi di questo senza utilizzare @SuppressWarnings("unchecked")?Tipo di sicurezza: l'espressione di tipo Elenco richiede una conversione non controllata per conformarsi all'elenco <Object[]>

Ecco il mio codice:

Configuration config = new Configuration(); 
     config.addAnnotatedClass(Employee.class); 
     config.configure("hibernate.cfg.xml"); 

     new SchemaExport(config).create(false, false); 

     ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() 
       .applySettings(config.getProperties()).build(); 
     SessionFactory factory = config.buildSessionFactory(serviceRegistry); 

     Session session = factory.getCurrentSession(); 

     session.beginTransaction(); 

     Query q = session 
       .createQuery("SELECT e.empId,e.empName FROM Employee e"); 

     @SuppressWarnings("unchecked") 
     List<Object[]> list = q.list(); <-- here is the problem! 
+0

No, non c'è. –

risposta

11

di Hibernate Session.list() restituisce una pianura, crudo List.

È perfettamente legale la sintassi Java per eseguire il cast in una raccolta parametrizzata (List<Object[]> qui). Ma a causa del fatto che le informazioni di tipo generico vengono cancellate in fase di esecuzione, il compilatore emetterà un avvertimento per dirti che non può garantire che questo cast sarà effettivamente valido. Quindi è solo il suo modo di dirti "Ehi, stai giocando con il fuoco qui, spero tu sappia cosa fai, perché non lo faccio".

In questo caso particolare, non è possibile fare nulla per eliminare questo avviso, ma è possibile assumersi la responsabilità di ignorarlo esplicitamente utilizzando l'annotazione @SuppressWarnings.

0

No, non c'è modo di rimuoverlo a meno che non si fanno q.list() esattamente un List<Object[]>

0

È possibile forzare il cast per rendere l'avvertimento andare via, ma quasi come sopprimere l'avviso che nasconde un potenziale problema poiché q.list() non è garantito per restituire quel tipo esatto.

List<Object[]> list = (List<Object[]>)q.list(); 
+0

Ho provato questo e il cast non ha rimosso l'avviso. Ha appena cambiato l'avviso in Cast non selezionato. –

Problemi correlati