繁体   English   中英

将休眠查询的结果转换为DTO

[英]Cast result of hibernate query to DTO

将休眠查询的结果转换为类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]

您可以尝试的是显式分配别名列的类型

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

但是,请确保*Type.INSTANCE和class字段与数据库表的列类型匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM