我是Hibernate的新手,并尝试创建一个将返回当前位置的API。 所以在DaoImpl中我写了一个查询
public List<Location> getCurrentLocation() {
return sessionFactory.getCurrentSession().createQuery("select l.employee.id, max(l.locationTime) as currentTime, l.longtitude , l.latitude,l.date from Location l group by l.employee.id").list();
}
在控制器中
@RequestMapping(value = "currentLocation", method = RequestMethod.GET)
public ResponseEntity<List<Location>> getCurrentLocation() {
List<Location> location;
try {
location = locationService.getCurrentLocation();
} catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<List<Location>>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<List<Location>>(location, HttpStatus.OK);
}
当我调用该API时,我会收到此回复
[[11,"07:30:00",106.634756,10.826307,"2017-11-23"],[15,"07:00:00",106.632142,10.826456,"2017-11-24"]]
我只是想问为什么我不能得到属性名称。我还是不明白。
有没有人可以解释这个,我怎样才能获得属性名称
例如['employeename':11,'time':"07:30:00",'longtitude':106.634756,'latitude':10.826307,'workday':"2017-11-23"]
请帮帮我
答案 0 :(得分:0)
这很简单:你使用像l.employee.id
这样的投影。
对于此查询
select loc from Location loc
或from Location
(相同的简短版本)
Hibernate返回List<Location>
,但是当你开始使用投影时,Hibernate会返回List<Object[]>
。你有这个列表作为回应。
list()
只返回一个List
(非通用),因此您有一个未经检查的转化
List<Object[]> -> List<Location>
你能做什么
使用转换器将查询结果转换为Map
,并从端点返回Map
。
使用其他变换器添加课程LocationDto
并将结果映射到DTO
列表。
在查询中直接使用some.package.LocaitionDto
构造函数(请不要忘记包)(how does the new keyword in hql work?)。
请不要忘记为每个投影添加别名。
Spring Hibernate get selected columns
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to className