Из учебника Java EE Я прочитал следующее:
Типы возврата
Тип возврата предложения SELECT
определяется типами результатов
выберите выражения, содержащиеся в
Это. Если используется несколько выражений,
Результатом запроса является
Объект [] и элементы в
массив соответствует порядку
выражения в предложении SELECT, и
по типу к типу результата каждого
выражение.
Теперь ваш запрос выглядит так:
SELECT g.filename, g.description, g.uploadDate FROM Garbage g;
Из вашего класса сущностей Garbage
Я прочитал, что filename
, description
, uploadDate
- это строки. Затем ваш запрос возвращает список Object[]
, и каждый элемент массива содержит строку, а не объект Garbage
.
Если ваш массив содержит строки, а не мусор, вы не можете вызвать garbage[0].filename
в своем лицевом стекле.
Попробуйте изменить запрос следующим образом:
SELECT g FROM Garbage g;
Тогда вы получите List<Garbage>
. В SearchEJB
измените сигнатуру метода следующим образом:
public List<Garbage> findAllGarbage()
Измените методы в вашем управляемом бине ResultsController
соответственно (теперь вам всегда нужно List<Garbage>
, а не List<Garbage[]>
).
Наконец, измените ваш p:dataTable
(показан для первого столбца):
<p:column sortBy="#{garbage.filename}">
<f:facet name="header">
<h:outputText value="Filename" />
</f:facet>
<h:outputText value="#{garbage.filename}" />
</p:column>
UPDATE:
Если вы хотите сохранить свой запрос, вы можете преобразовать Object[]
в список Garbage
объектов и оставить пропущенные поля пустыми. Примерно так (добавьте конструктор к вашему классу мусора):
List<Garbage> gList = new ArrayList();
for (Object[] o: query.getResultList()) {
gList.add(new Garbage(o[0], o[1], o[2]);
}
ОБНОВЛЕНИЕ 2:
В вашем обновлении вы снова пропустили, что ваш массив содержит строки. И строки упорядочены так, как упорядочено ваше выражение выбора: элемент 0: имя файла, элемент 1: описание, элемент 2: uploadDate.
Измените ваш цикл следующим образом:
for (Object o: query.getResultList()) {
Garbage tmpG = new Garbage();
tmpG.setFilename(o[0]);
tmpG.setDescription(o[1]);
tmpG.setUploadDate(o[2]);
gList.add(tmpG);
}