4 回答

TA貢獻2019條經驗 獲得超9個贊
@SuppressWarnings如建議的那樣,在任何地方使用都是一種不錯的方法,盡管每次調用都會涉及一些手指輸入q.list()。
我建議使用其他兩種技術:
寫一個演員助手
只需將所有內容重構@SuppressWarnings到一個位置:
List<Cat> cats = MyHibernateUtils.listAndCast(q);
...
public static <T> List<T> listAndCast(Query q) {
@SuppressWarnings("unchecked")
List list = q.list();
return list;
}
防止Eclipse為不可避免的問題生成警告
在Eclipse中,轉到“窗口”>“首選項”>“ Java”>“編譯器”>“錯誤/警告”,然后在“通用類型”下,選中復選框 Ignore unavoidable generic type problems due to raw APIs
對于類似的問題,這將關閉不必要的警告,這是不可避免的。
一些評論:
我選擇傳遞Query而不是結果,q.list()因為那樣,這種“欺騙”方法只能用于用Hibernate進行欺騙,而不能用于List一般的欺騙。
您可以為.iterate()etc 添加類似的方法。

TA貢獻1797條經驗 獲得超4個贊
提出問題已有很長時間了,但我希望我的回答可能對像我這樣的人有所幫助。
如果您看一下javax.persistence api docs,將會發現從那時起已經在其中添加了一些新方法Java Persistence 2.0。其中之一就是createQuery(String, Class<T>)回報TypedQuery<T>。您可以像使用TypedQuery它一樣使用,只是Query所有操作現在都是類型安全的,差別很小。
因此,只需將代碼更改為如下所示:
Query q = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q.list();
你們都準備好了。

TA貢獻1963條經驗 獲得超6個贊
我們也使用@SuppressWarnings("unchecked")它,但是我們經常嘗試僅在變量的聲明中使用它,而不是在整個方法中使用它:
public List<Cat> findAll() {
Query q = sess.createQuery("from Cat cat");
@SuppressWarnings("unchecked")
List<Cat> cats = q.list();
return cats;
}

TA貢獻1820條經驗 獲得超9個贊
嘗試使用TypedQuery代替Query。例如,代替此:
Query q = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q.list();
用這個:-
TypedQuery<Cat> q1 = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q1.list();
添加回答
舉報