Я новичок в 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
возвращает a java.util.List
как необработанный тип. Мне кажется странным, что в последней версии Hibernate (4.0.x) не реализованы параметризованные типы, поэтому я подозреваю, что вместо этого я делаю что-то не так.
Это очень похоже на результат Cast Hibernate для списка объектов , но здесь у меня нет "серьезных" ошибок (система знает тип Foo, и я использую не SQLQuery, а простой запрос). Так что никакой радости.
Я также посмотрел на исключение Hibernate Class Cast Exception, так как оно выглядело многообещающим, но затем я понял, что на самом деле ничего не получаю Exception
... моя проблема - это просто предупреждение - стиль кодирования, если хотите.
Документация на jboss.org, руководства по Hibernate и несколько руководств, похоже, не раскрывают эту тему так подробно (или я не искал в нужных местах?). Когда они вводят детали, они используют кастинг на лету - и это в обучающих программах, которых не было на официальном сайте jboss.org, поэтому я немного насторожен.
После компиляции код работает без явных проблем ... о которых я знаю ... пока; и результаты ожидаемые.
Итак: правильно ли я делаю? Я упускаю что-то очевидное? Есть ли «официальный» или «рекомендуемый» способ сделать это ?