Mysql hibernate查询,用于获取带有连接的json键值对
我正在使用REST,hibernate查询语言从数据库中获取一些数据,在该查询中,我需要从两个或多个表中获取列,并获取结果记录,当我通过REST以json形式返回该对象时,我将以如下格式获取json {table1col1value,table2col1value,table3colvalue,table1col2value,table2col2value} 但是我需要获得以下格式的json数据 {table1colname1:table1col1value,table2colname:table2col1value,table1colname:table3colvalue,table1colname:table1col2value,table2colname:table2col2value} 为此,我使用以下代码,它的工作很好,但它与sql查询只工作,我需要它在HQL,请帮助我在这方面Mysql hibernate查询,用于获取带有连接的json键值对,mysql,json,rest,hql,Mysql,Json,Rest,Hql,我正在使用REST,hibernate查询语言从数据库中获取一些数据,在该查询中,我需要从两个或多个表中获取列,并获取结果记录,当我通过REST以json形式返回该对象时,我将以如下格式获取json {table1col1value,table2col1value,table3colvalue,table1col2value,table2col2value} 但是我需要获得以下格式的json数据 {table1colname1:table1col1value,table2colname:tabl
@Override
@Transactional
public List<Map<String,Object>> getMixProperties(List<String> keys,Set<String> s) {
StringBuilder sb = new StringBuilder();
sb.append("select ");
Iterator<String> i = keys.iterator();
int q = keys.size();
while (i.hasNext()) {
q=q-1;
if(q==0){
String n= i.next();
sb.append(" "+n);
}
else{
String n2= i.next();
sb.append(" "+n2+",");}
}
sb.append(" from Book Book "
+ " join Systems Systems ON Systems.idSystems =Book.idSystems "
+ " join Machine Machine ON Machine.id =Systems.id ");
/*Iterator<String> iterator = s.iterator();
int q2 = s.size();String s5 = null;
while(iterator.hasNext()) {
String s4 = iterator.next();
q2=q2-1;
if(q2==0){
sb.append(" "+s4+" "+s4);
}
else{
s5=s4;
sb.append(" "+s4+" "+s4+",");}
}*/
System.out.println("query "+sb);
String sbb = sb.toString();
Query query=sessionFactory.getCurrentSession().createSQLQuery(sbb);
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> aliasToValueMapList=query.list();
return aliasToValueMapList;
}
在上面的代码列表中,键将是不同表的列名,集合s将是表名,但我在当前代码中没有使用它
即使这样,也只有在类和db表名称相同,属性和列名相同的情况下才有效,如果不相同,则不起作用
只有当我有pojo类时,我才能得到JSON,但在我的例子中,结果集可以是任意数量的列,因此它只取决于运行时,请在这方面帮助我