在没有 Pojo 或 Scalar 的休眠状态下从 createSqlQuery 获取 List<HashMap>
get List<HashMap> from createSqlQuery in hibernate without Pojo or Scalar
我正在尝试将 SQL 查询 return 类型(列表)转换为列表,但截至目前,我正在获取 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]);
}
}
尝试这样的事情。
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Test.class));
这就是我找到解决方案的方式,因为没有预定义的函数可以执行此操作。首先,我从查询中检索了所有列,然后使用 column_name(key) 和 queryResult(value) 创建了一个哈希图。 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;
}
我正在尝试将 SQL 查询 return 类型(列表)转换为列表,但截至目前,我正在获取 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]);
}
}
尝试这样的事情。
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Test.class));
这就是我找到解决方案的方式,因为没有预定义的函数可以执行此操作。首先,我从查询中检索了所有列,然后使用 column_name(key) 和 queryResult(value) 创建了一个哈希图。 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;
}