用连接获取json键值对的hibernate查询

时间:2016-03-03 12:16:53

标签: mysql json rest hql

我正在使用REST,hibernate查询语言通过该查询中的连接从数据库中获取一些数据我需要从两个或多个表中获取列并且我得到结果记录,当我通过该方法返回该对象时REST作为json我正在以下面的格式获取json

  

{"table1col1value","table2col1value","table3colvalue","table1col2value","table2col2value"}

但我需要以下列格式获取json数据

  

{"table1colname1":"table1col1value","table2colname":"table2col1value","table1colname":"table3colvalue","table1colname":"table1col2value","table2colname":"table2col2value"}

因为我正在使用以下代码并且它正常工作,但它只使用sql查询我需要它在HQL中,请帮助我。

 @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;
}

在上面的代码中,List键将是不同表的列名,(set s将是表名,但我没有在当前代码中使用它)

即使这样做只有我同时使用类和db表名相同且属性和列名相同,如果它不相同然后它不起作用。

我只有在拥有pojo类时才获得JSON,但在我的情况下,结果集可以是任意数量的列,因此它仅取决于运行时,请帮助我

0 个答案:

没有答案