我写的一个Hibernate调用存储过程的代码。
[code="java"]
public List getTotalRoomsAndAvailRoomsByApartmentID(final String apartmentid) {
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(final Session session) throws HibernateException, SQLException {
SQLQuery query = (SQLQuery) session.createSQLQuery("{call GetTotalAvailByApartId(?)}")
log.info("公寓id:" + apartmentid);
query.addScalar("total", Hibernate.INTEGER);
query.addScalar("avail", Hibernate.INTEGER);
log.info("List的大小是:" + query.list().size());
for (int i = 0; i < query.list().size(); i++) {
Object[] o = (Object[]) query.list().get(i);
int avail = (Integer) o[0];
// int avail = (Integer) o[1];
System.out.println("tatal:\t" + avail + " , avail:\t");
}
return query.list();
}
});
return null;
}
[/code]
实际的存储过程是:
BEGIN
select count(student.studentid) as total, (select sum(dormitory.dormitoryroomtype) from dormitory where dormitory.apartmentid=ApartId)-count(student.studentid) as avail from studentbedlink join student on student.studentid=studentbedlink.studentid join dormitorybed on dormitorybed.dormitorybedid=studentbedlink.dormitorybedid join dormitory on dormitory.dormitoryid=dormitorybed.dormitoryid where dormitory.apartmentid=ApartId;
END
当我输入apartID =1 时会返回列表:
total avail
1123 14
这种格式。
但是程序返回的结果List大小始终为1,
下面的循环打印也只能给出total的结果为:1123。 avail的值打印不出来。请问应该怎么写。
因为我的存储过程涉及三个POJO:Apartment, Dormitory,Student。
是否需要.addEntity(Student.class)?
还有.如果我把三个pojo都addEntity了。会提示我找不到apartmentid,studentid。
还是对于addscalar()不是特别明白。
知道的麻烦回复下。谢谢!