Я пытаюсь получить данные из БД и сопоставить их с другой сущностью, но я получаю ArrayIndexOutOfBoundsException
Но в следующей строке вы этого не делаете, вы пытаясь получить список Student
списка сущностей. А какая у вас другая сущность здесь?
entityManager.createNamedQuery("findAll", Student.class);
Но так как вы предоставили другую сущность Generic
, я предполагаю, что вы хотите, чтобы в нее загружались ваши данные. Существуют разные возможные решения этой проблемы. Давайте разберемся.
Использование SELECT NEW ключевых слов
Обновите свой собственный запрос на этот
@NamedNativeQueries({
@NamedNativeQuery(name = "Student.findAll", query = "SELECT NEW Generic(a.student_id, a.student_code) FROM Student a")
})
Вы должны определить конструктор в Класс Generic
, который квалифицирует этот вызов
public void Generic(Long id, String code) {
this.id = id;
this.code = code;
}
И обновите выполнение запроса в DAO как
List<Generic> results = em.createNamedQuery("Student.findAll" , Generic.class).getResultList();
Примечание: Возможно, у вас есть поместить полный путь к классу Generic
в запросе для этой конструкции
из List<Object[]>
В качестве альтернативы, простое и простое решение получит список результатов как список Object[]
и заполнить любой новый объект, который вы хотите.
List<Object[]> list = em.createQuery("SELECT s.student_id, s.student_code FROM Student s")
.getResultList();
for (Object[] obj : list){
Generic generic = new Generic();
generic.setId(((BigDecimal)obj[0]).longValue());
generic.setCode((String)obj[1]);
}