hibernate自定义sql关联查询结果组装为对象

简介: hibernate自定义sql关联查询后没有对应的entity,如何映射为对应的bean

hibernate自定义sql关联查询后,结果集如何处理

    public SimplePage<WorkFlowEventDto> listPage(WorkFlowEventDto condition, int start, int limit) {
        StringBuilder selectColumnSql = new StringBuilder("SELECT a.`id` as id,g.name as resourceType,b.name as instanceName,pin.`serial_num` AS instanceNumber," +
                "h.`op_name` as operation,a.status as status,a.`create_time` as createdTime,c.`vm_name` as vmName" +
                ",d.`vdisk_name` as vdiskName,e.`file_sys_name` as fsName");
        StringBuilder selectCountSql = new StringBuilder("select count(a.id)");
        StringBuilder sql = new StringBuilder(
                " FROM work_flow_event a LEFT JOIN resource_instance b ON a.`resourece_instance_id`=b.`id`" +
                " LEFT JOIN product_instance pin ON pin.`id`=b.`product_instance_id`" +
                " LEFT JOIN vm_res_instance c ON b.id=c.`vm_id` LEFT JOIN vdisk_resource_instance d ON b.`id`=d.`vdisk_id`" +
                " LEFT JOIN file_sys_resource_instance e ON b.`id`=e.`file_sys_id` LEFT JOIN resource f ON b.`resource_id`=f.`id`" +
                " LEFT JOIN resource_type g ON f.`type_id`=g.`id` LEFT JOIN work_flow h ON a.event_type=h.op_type WHERE 1=1");

        List<Object> params = new ArrayList<Object>();
        if (condition != null) {
            if (StringUtils.isNotBlank(condition.getInstanceName())) {
                sql.append(" AND b.`name` LIKE ?");
                params.add("%"+condition.getInstanceName()+"%");
            }
            if (StringUtils.isNotBlank(condition.getInstanceNumber())) {
                sql.append(" AND pin.`serial_num` LIKE ?");
                params.add("%"+condition.getInstanceNumber()+"%");
            }
            if (StringUtils.isNotBlank(condition.getCloudosName())) {
                sql.append(" AND (c.`vm_name` LIKE ? OR d.`vdisk_name` LIKE ? OR e.`file_sys_name` LIKE ?)");
                params.add("%"+condition.getCloudosName()+"%");
                params.add("%"+condition.getCloudosName()+"%");
                params.add("%"+condition.getCloudosName()+"%");
            }
            if (StringUtils.isNotBlank(condition.getResourceType())) {
                sql.append(" AND g.`type_number`=?");
                params.add(condition.getResourceType());
            }
            if (condition.getStatus() != null) {
                if(IWorkFlowConstant.WORK_FLOW_STATUS_EXECUTING == condition.getStatus()){
                    sql.append(" and (a.`status` = 2 or a.`status`= 6)");
                }else {
                    sql.append(" and a.`status`=?");
                    params.add(condition.getStatus());
                }
            }
        }
        selectColumnSql.append(sql).append(" ORDER BY a.`create_time` DESC");
        selectCountSql.append(sql);
        SQLQuery q = this.getSession().createSQLQuery(selectColumnSql.toString());
        SQLQuery qc = this.getSession().createSQLQuery(selectCountSql.toString());
        for (int i = 0; i < params.size(); i++) {
            q.setParameter(i, params.get(i));
            qc.setParameter(i, params.get(i));
        }
        q.addScalar("id", Hibernate.INTEGER);
        q.addScalar("resourceType", Hibernate.STRING);
        q.addScalar("instanceName", Hibernate.STRING);
        q.addScalar("instanceNumber", Hibernate.STRING);
        q.addScalar("operation", Hibernate.STRING);
        q.addScalar("status", Hibernate.INTEGER);
        q.addScalar("createdTime", Hibernate.TIMESTAMP);
        q.addScalar("vmName", Hibernate.STRING);
        q.addScalar("vdiskName", Hibernate.STRING);
        q.addScalar("fsName", Hibernate.STRING);
        q.setResultTransformer(Transformers.aliasToBean(WorkFlowEventDto.class));
        List<WorkFlowEventDto> data = q.setMaxResults(limit).setFirstResult(start).list();
        int totalCount = Integer.valueOf(qc.uniqueResult().toString());
        return new SimplePage<WorkFlowEventDto>(data, totalCount);

这是一个按条件分页查询,主要就是用hibernate查询出对象
WorkFlowEventDto不是一个hibernate实体,重要的不是上边那堆,注意看setResultTransformer(Transformers.aliasToBean(WorkFlowEventDto.class))

目录
相关文章
|
11天前
|
SQL 存储 程序员
SQL查询的一些基本知识和学习指导
【6月更文挑战第17天】SQL查询核心包括基础选择、连接(JOIN)、子查询、聚合函数与GROUP BY、模糊匹配(LIKE)、分页与排序。JOIN操作连接多表,GROUP BY配合聚合函数做统计,LIKE用于模糊搜索。理解存储过程、触发器及自动增长列等进阶概念,通过实践提升SQL技能。
41 2
|
4天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何调整改变SQL查询的严格性
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如果oss文件过大,如何在不调整oss源文件大小的情况下优化查询sql
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2天前
|
SQL 缓存 关系型数据库
PolarDB产品使用问题之已经修改了expire_logs_days参数并确认已生效,但在SQL查询中仍然显示为0,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用问题之如何通过临时查询功能来书写和运行SQL语句
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
SQL 前端开发 关系型数据库
零基础学习数据库SQL语句之查询表中数据的DQL语句
零基础学习数据库SQL语句之查询表中数据的DQL语句
9 0
|
7天前
|
SQL 关系型数据库 MySQL
零基础学习数据库SQL语句之定义数据库对象的DDL语句
零基础学习数据库SQL语句之定义数据库对象的DDL语句
13 0
|
15天前
|
SQL
SQL查询
SQL查询
16 0
|
1月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
3天前
|
Java 数据库连接 数据库
探索JPA生态:Hibernate与其他ORM框架的对比分析
【6月更文挑战第25天】**JPA标准下的Hibernate是流行的ORM实现,提供丰富功能如二级缓存和延迟加载,但其学习曲线较陡,性能优化复杂。相比如MyBatis,Hibernate的JPQL更面向对象,MyBatis则接近SQL。选择ORM需考虑项目需求和个人偏好。**