2015-04-16 21 views
7

當我想啓動一個Hibernate應用程序時,Im總是會出現類型安全警告。沒有使用@SuppressWarnings("unchecked")擺脫這種方法嗎?類型安全:類型列表的表達式需要未經檢查的轉換以符合列表<Object[]>

這裏是我的代碼:

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

不,沒有。 –

回答

11

Hibernate的Session.list()回報平原,生List

將它轉換爲參數化集合(此處爲List<Object[]>)是完全合法的Java語法。但是由於泛型類型的信息在運行時被清除,編譯器會發出一個警告,告訴你它不能保證這個轉換實際上是有效的。 所以這只是他的方式告訴你「嘿,你在這裏玩火,我希望你知道你做了什麼,因爲我不這樣做」。

在這種特殊情況下,你不能做任何事情,以消除此警告,但你可以採取的利用@SuppressWarnings註釋明確地忽略它的責任。

0

沒有,沒有辦法,除非你讓q.list(刪除它)完全是一個List<Object[]>

0

您可以強制演員做出警告走但很像禁止它隱藏潛在問題的警告,因爲q.list()不能保證返回確切的類型。

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

我試過了,劇組沒有刪除警告。它只是將警告更改爲未檢查投射。 –

相關問題