最近在學MongoTemplate的一些用法, 各位大牛看下小弟的報錯資訊.
@Override
public List<Attendance> list(String studioCode, String studentCode, PageBean pageBean, Date startTime,
Date endTime) {
Query query = new Query();
if(!StringUtils.isEmpty(studioCode)){
query.addCriteria(new Criteria("studioCode").is(studioCode));
}
if(!StringUtils.isEmpty(studentCode)){
query.addCriteria(new Criteria("studentCode").is(studentCode));
}
if(startTime != null){
query.addCriteria(new Criteria("attendanceTime").gte(startTime));
}
if(endTime != null){
query.addCriteria(new Criteria("attendanceTime").lt(endTime));
}
query.skip(pageBean.getStart()).limit(pageBean.getPageSize());
return catsMongoTemplate.find(query, Attendance.class);
}
然后報錯資訊如下:
org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Due to limitations of the com.mongodb.BasicDBObject, you can't add a second 'attendanceTime' criteria. Query already contains '{ "attendanceTime" : { "$gte" : { "$date" : "2016-10-31T16:00:00.000Z"}}}'.
org.springframework.data.mongodb.core.query.Query.addCriteria(Query.java:99)
com.hx.dao.studio.attendance.impl.AttendanceDaoImpl.list(AttendanceDaoImpl.java:46)
com.hx.service.studio.attendance.impl.AttendanceServiceImpl.list(AttendanceServiceImpl.java:33)
com.hx.controller.studio.attendance.AttendanceController.attendanceInfo(AttendanceController.java:45)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)小弟也知道錯在哪里,因為注視掉
query.addCriteria(new Criteria("attendanceTime").gte(startTime));或者注視掉query.addCriteria(new Criteria("attendanceTime").lt(endTime));就可以正常查詢了,就是不知道應該怎么寫,各位大牛綁小弟看下~
uj5u.com熱心網友回復:
改用and()操作,這個網上很多解決方案。uj5u.com熱心網友回復:
你這個不能持續的添加含有attendanceTime的criteria物件,可以在這個物件后面追加lt操作,比如可以改成類似我這個例子:if (queryParams.getStartDate() != null || queryParams.getEndDate() != null) {
if (queryParams.getStartDate() != null && queryParams.getEndDate() == null) {
query.addCriteria(Criteria.where("createTimeStamp").gte(queryParams.getStartDate().getTime()));
}else if (queryParams.getEndDate() != null && queryParams.getStartDate() == null) {
query.addCriteria(Criteria.where("createTimeStamp").lte(queryParams.getEndDate().getTime()));
}else{
query.addCriteria(Criteria.where("createTimeStamp").gte(queryParams.getStartDate().getTime()).lte(queryParams.getEndDate().getTime()));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/201630.html
標籤:Web 開發
