Приведение результата запроса гибернации к DTO - PullRequest
0 голосов
/ 02 марта 2019

У меня проблема при приведении результата запроса гибернации к классу DTO.Моя база данных, код и ошибка здесь: база данных

Я считаю и суммирую все ошибки и достижения и получаю результат в файл jsp Имя таблицы: запись, тип 0 - ошибкатип 1 - достижение

Результат запроса в phpmyadmin

|---------------------------------------------------|
|StaffId  |  achievement   |   mistake   |   total  |
|   1111  |    0           |       2     |    -2    |
|---------------------------------------------------|

Репозиторий

@Override
public List<RecordFormHomePage> selectt() {
    Session session = this.sessionFactory.getCurrentSession();
    List<RecordFormHomePage> recordsList = (List<RecordFormHomePage>)session.createSQLQuery(
            "select `StaffId`,sum(case when `Type`=1 then 1 else 0 end) as achievement, sum(case when `Type`=0 then 1 else 0 end) as mistake, sum(case when `Type`=1 then 1 else 0 end)-sum(case when `Type`=0 then 1 else 0 end) as total from Records group by `StaffId`\n"
                    + "").setResultTransformer(Transformers.aliasToBean(RecordFormHomePage.class)).list();
    System.out.println(recordsList.size());
    return recordsList;
}

Сервис

@Override
public List<RecordFormHomePage> list() {
    List<RecordFormHomePage> list = recordRepository.selectt();
    return list;

}

Контроллер

@GetMapping
public String index(Model model) {
    model.addAttribute("TopStaff", recordService.list());
    return "/homepage/index";
}

DTO

public class RecordFormHomePage implements Serializable{
int staffId;
int achievement;
int mistake;
int total;

Ошибка

Message Request processing failed; nested exception is IllegalArgumentException occurred while calling setter for property [vn.sof302.trunglqph04966.record.form.RecordFormHomePage.achievement (expected type = int)]; target = [RecordFormHomePage [StaffId=111111, Achievement=0, mistake=0, total=0]], property value = [0]

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете попробовать явно назначить типы столбцов с псевдонимами

session.createSQLQuery("select ...")
    .addScalar("achievement", IntegerType.INSTANCE)
    .addScalar("mistake", IntegerType.INSTANCE)
    .addScalar("total", IntegerType.INSTANCE)
    .setResultTransformer(Transformers.aliasToBean(RecordFormHomePage.class))
    .list();

Но убедитесь, что *Type.INSTANCE и поле класса соответствуют типу столбца таблицы базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...