使用hiberate 原生查询
public List<SearchHouse2> findPageByDistance(int page, int size,double lon,double lat) {
// String sql = "select a4.aid,a4.address,a4.touzishang, a4.jdjj, a15.thumb,a15.subject FROM cms_archives15 as a15 join cms_archives_4 as a4 where a15.aid=a4.aid order by a15.aid DESC";
String sql="SELECT * ,getDistance("+lon+",building.dt_0,"+lat+",dt_1) as dis from (select a4.aid,a4.address,a4.touzishang, a4.jdjj, a15.thumb,a15.subject,a15.dt_0,a15.dt_1 FROM cms_archives15 as a15 join cms_archives_4 as a4 where a15.aid=a4.aid ) as building ORDER BY dis ASC";
System.out.println(sql);
List list = this.getSession().createSQLQuery(sql)
.addScalar("aid", Hibernate.INTEGER)
.addScalar("address", Hibernate.STRING)
.addScalar("touzishang", Hibernate.STRING)
.addScalar("jdjj", Hibernate.FLOAT)
.addScalar("thumb", Hibernate.STRING)
.addScalar("subject", Hibernate.STRING)
.addScalar("dis", Hibernate.DOUBLE)
.setFirstResult((page - 1) * size).setMaxResults(size).list();
ArrayList<SearchHouse2> ssh = new ArrayList<SearchHouse2>();
for (int i = 0; i < list.size(); i++) {
SearchHouse2 sh = new SearchHouse2();
Object[] temp = (Object[]) list.get(i);
System.out.println(temp);
System.out.println(temp.length);
System.out.println(temp.toString());
sh.setAid((Integer) temp[0]);
sh.setAddress((String) temp[1]);
sh.setTouzishang((String) temp[2]);
sh.setJdjj((Float) temp[3]);
sh.setThumb((String) temp[4]);
sh.setSubject((String) temp[5]);
sh.setDis((Double)temp[6]);
ssh.add(sh);
}
return ssh;
}
用navicat查到的结果:
sh.setDis((Double)temp[6]); 问题,之前是把6用的8, 提示数组 越界
虽然查的条数是8条的,但.addScalar("dis", Hibernate.DOUBLE) 只有6 所以会报错