Причина, по которой вы получаете ClassCastException, заключается в том, что ваш запрос getAllGarbage не возвращает коллекцию экземпляров мусора. Запрос написан так, чтобы специально возвращать подмножество значений, связанных с экземпляром Garbage, а не полный объект Garbage. Если вы отладите метод, вы, вероятно, заметите, что query.getResultsList () возвращает коллекцию Object []. Объект [] должен соответствовать значениям, указанным в вашем именованном запросе: имя файла, описание и дата загрузки.
Вот пример использования результата, который должен работать.
for (Object o : query.getResultList()) {
Object[] cols = (Object[]) o;
Garbage tmpG = new Garbage();
tmpG.setFilename(cols[0]);
tmpG.setDescription(cols[1]);
tmpG.setUploadDate(cols[2]);
gList.add(tmpG);
}
Альтернативой является изменение собственного запроса на
select g from Garbage g
, что приведет к возвращению полного экземпляра мусора, что позволит вашему исходному коду выполняться должным образом.
На заметку, я рекомендую не выполнять приведение классов для каждого доступа к экземпляру Garbage, как вы делаете в своем примере кода. Этот метод добавляет ненужные накладные расходы приложению и усложняет поддержку кода в долгосрочной перспективе. Если вы собираетесь использовать приведенный объект более одного раза, создайте переменную для хранения приведенного экземпляра и используйте его повторно.