java - 在 hibernate 中从 createSqlQuery 获取 List<HashMap> ,无需 Pojo 或 Scalar

标签 java hibernate jdbc spring-data spring-jdbc

我正在尝试将 SQL 查询返回类型(列表)转换为列表,但截至目前,我得到的是 Object[] 列表。有没有什么方法可以不借助Pojo,添加标量或者HQL,直接转换为List?

我当前的抽象查询方法是

String sqlQuery = "SELECT UI.idea_id, UI.user_id,UI.title, UI.innovators
FROM user_idea AS UI  
WHERE UI.status=1 AND CONCAT(';',UI.innovators,';') like '%;jack;%';";
        try {
            Query query = getCurrentSession().createSQLQuery(sqlQuery);
            if (values != null) {
                for (int i = 0; i < values.length; i++) {
                    query.setParameter(i, values[i]);
                }
            }

最佳答案

这就是我找到解决方案的方法,因为没有预定义的函数可以做到这一点。首先,我从查询中检索所有列,然后使用 column_name(key) 和 queryResult(value) 制作一个 HashMap 。应避免 select * from..,而是在查询中给出所需的列名称,以便从给定函数获取结果。

public List<Map> queryResultToListMap(String query, List queryResult) {
        int indexOffrom = query.indexOf("from");
        int indexOfselect = query.indexOf("select");
        String subquery = query.substring(indexOfselect, indexOffrom);
        subquery = subquery.replace("select", "");
        String[] arr = subquery.split(",");

        List cols = new ArrayList();
        for (int i = 0; i < arr.length; i++) {
            String[] subarr = arr[i].split(" ");
            cols.add(subarr[subarr.length - 1]);
        }
        List<Map> colswithdata = new ArrayList<>();
        Iterator itr = queryResult.iterator();

        while (itr.hasNext()) {
            HashMap colsWithData = new HashMap();
            Object[] tempArray = (Object[]) itr.next();
            for (int i = 0; i < cols.size(); i++) {
                colsWithData.put(cols.get(i), tempArray[i].toString());
            }
            colswithdata.add(colsWithData);

        }

        return colswithdata;
    }

关于java - 在 hibernate 中从 createSqlQuery 获取 List<HashMap> ,无需 Pojo 或 Scalar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675241/

相关文章:

java - else 语句不会在 if else 语句中执行

java - 错误: Cannot create PoolableConnectionFactory (isValid() returned false)

java - Hibernate通过java.util设置多对一关系

java - org.postgresql.util.PSQLException : The column index is out of range: 2, 列数:1

java - 将 JDBI 与不支持准备好的语句的 JDBC 驱动程序一起使用

java - BufferedReader 和 BufferedWriter

java - 在 Java 中使用数组创建 Stack 类

java - 将 XSD 元素绑定(bind)到 Java 实现?

hibernate - org.hibernate.tool.schema.spi.CommandAcceptanceException : Error executing DDL

java - sql update 语句无法从 Java 运行,而是手动运行?