我有两个表名称是员工和部门,结构如下
员工
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();
请帮我解决这个问题。
答案 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);
}
}