私はHibernateの初心者であり、特定のフィルターに一致するオブジェクトのリストを返す簡単なメソッドを作成しています。List<Foo>
自然な戻り値の型のようでした。
私が何をするにしても、醜いものを使わない限り、コンパイラを幸せにすることはできないようです@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();
}
}
私はそれを取り除きたいですSuppressWarnings
。しかし、そうすると、警告が表示されます
Warning: Unchecked cast from List to List<Foo>
(無視できますが、そもそも取得したくない)、.list()
戻り値の型に準拠するようにジェネリックを削除すると、警告が表示されます
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
私はそれorg.hibernate.mapping
がList
;を宣言していることに気づきました。しかし、それはまったく別の型です-生の型として、をQuery
返しますjava.util.List
。最近のHibernate(4.0.x)がパラメーター化された型を実装しないのは奇妙だと思うので、代わりに何か間違ったことをしているのは私だと思います。
オブジェクトのリストにHibernateの結果をキャストするのと非常によく似ていますが、ここでは「ハード」エラーはありません(システムはタイプFooを認識しており、SQLQueryではなくストレートクエリを使用しています)。だから喜びはありません。
Hibernate Class Cast Exceptionも有望に見えたので調べましたが、実際には何も得られないことに気付きましたException
...私の問題は警告の問題です-コーディングスタイルです。
jboss.orgは、Hibernateのマニュアルや、いくつかのチュートリアルのドキュメントは内のトピックをカバーしていないような詳細(または私は右の場所で検索しませんでした?)。彼らが詳細に入るとき、彼らはオンザフライキャスティングを使用します-そしてこれは公式のjboss.orgサイトになかったチュートリアルであるので、私は少し警戒しています。
コードは、コンパイルされると、明らかな問題なく実行されます...私が知っていることです...まだ; 結果は期待どおりです。
だから:私はこれを正しくやっていますか?明らかな何かが欠けていますか?それを行うための「公式」または「推奨」の方法はありますか?