0
여기에서이 작업을 실행하려고합니다.스프링을 사용하여 HQL을 실행하는 중에 알 수없는 오류 메시지가 발생합니다.
public List<String> getOnlineUsers(){
List<User> d=sessionfactory.getCurrentSession().createQuery("from User").list();
List<String> onlineUsers=null;
List<Integer> timediff=null;
for(int i=0;i<d.size();i++){
timediff=(List<Integer>)sessionfactory.getCurrentSession().createQuery("SELECT TIMESTAMPDIFF(SECOND,'"+d.get(i).getLastUpdated()+"',now())").list();
}
for(int i=0;i<timediff.size();i++){
System.out.println("time "+timediff.get(i));
if(timediff.get(i)<=120){
onlineUsers.add(d.get(i).getUsername());
}
}
return onlineUsers;
}
하지만
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.beingjavaguys.controller.HomeController.showOnlineUsers(java.lang.String,org.springframework.validation.BindingResult)]; nested exception is java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'TIMESTAMPDIFF' {originalText=TIMESTAMPDIFF}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[IDENT] IdentNode: 'SECOND' {originalText=SECOND}
+-[QUOTED_STRING] LiteralNode: ''2013-09-08 01:02:11.0''
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'now' {originalText=now}
\-[EXPR_LIST] SqlNode: 'exprList'
가 캔트도 내가 blank.What 내가 그것을 해낸 이유 갔다 이것을보고 오류 message.The 순간에 생각이 오류 메시지는 무엇입니까?
수정 방법을 설명해 주시겠습니까? 내가 비슷한 문제에 직면하기 때문에, 선택 TIMESTAMPDIFF (MINUTE, GETDATE(), upcl.registeredOn)에서 sometable upcl; GETDATE()는 현재 날짜를 가져 오는 HQL 함수입니다. –
귀하의 경우에는 TIMESTAMPDIFF()가 네이티브 함수이고 HQL 카운터 파트가 없으므로 SQLQuery를 사용해야하고 HQL 버전이 필요하지 않다고 생각합니다. –
하지만이 질문과 같지 않습니까? "선택 TIMESTAMPDIFF (SECOND, '"+ d.get (i) .getLastUpdated() + "', now())" –