2013-09-07 2 views
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 순간에 생각이 오류 메시지는 무엇입니까?

답변

1

TIMESTAMPDIFF에서 두 번째 매개 변수로 유효한 datetime 및 리터럴을 전달해야한다고 생각합니다.

+0

수정 방법을 설명해 주시겠습니까? 내가 비슷한 문제에 직면하기 때문에, 선택 TIMESTAMPDIFF (MINUTE, GETDATE(), upcl.registeredOn)에서 sometable upcl; GETDATE()는 현재 날짜를 가져 오는 HQL 함수입니다. –

+0

귀하의 경우에는 TIMESTAMPDIFF()가 네이티브 함수이고 HQL 카운터 파트가 없으므로 SQLQuery를 사용해야하고 HQL 버전이 필요하지 않다고 생각합니다. –

+0

하지만이 질문과 같지 않습니까? "선택 TIMESTAMPDIFF (SECOND, '"+ d.get (i) .getLastUpdated() + "', now())" –

관련 문제