不使用join的AliasToEntityMapResultTransformer.INSTANCE

时间:2015-03-24 11:45:41

标签: java mysql sql database hibernate

我有两个表名称是员工和部门,结构如下

员工

ID,名称,地址,城市,DEPTID,状态,移动

ID,名称

现在使用Java,如果我使用join启动查询并且已设置

AliasToEntityMapResultTransformer.INSTANCE

因为Map Result会显示员工表的id列,但是我想要两个表的所有字段,并且还要按订单的形式显示结果。

查询

  select * from employee em left join department dept em.deptid=dept.id;

Java代码。

SQLQuery query = (SQLQuery)session.createSQLQuery("select * from employee   em left join department dept em.deptid=dept.id;");
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> valuesList=query.list();

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

使用以下方法解决问题。

<强>解决方案

  List<String> clmnList=null;
  List<Map<String,Object>> valList=new ArrayList<Map<String,Object>>();
  connection =  DriverManager.getConnection(connURL,userName,password);
  Statement stmt = connection.createStatement();
  ResultSet rs = stmt.executeQuery("select * from employee em left join department dept em.deptid=dept.id");

if(rs!=null)
{
    ResultSetMetaData rsmd = rs.getMetaData();
    int countColumn=rsmd.getColumnCount();

    for(int k=1;k<=countColumn;k++)
    {
        String name = rsmd.getColumnName(k);
        if(clmnList!=null && clmnList.size()>0){
            if(clmnList.contains(name)){
                name=rsmd.getTableName(k)+"."+name;
            }
            clmnList.add(name);
        }else{
            clmnList=new ArrayList<String>();
            clmnList.add(name);
        }
    }
    while (rs.next()) {
    Map<String,Object> valueMap=new HashMap<String, Object>();
    for(int i123=1;i123<=countColumn;i123++){
        valueMap.put(clmnList.get(i123-1),rs.getString(i123));
    }
    valList.add(valueMap);
    }
}