2014-06-24 165 views
0

我寫下面的查詢來獲得創紀錄的今天日期Hibernate的SQL異常java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍

Session session = getSessionFactory().getCurrentSession(); 
DateTime todayAtMidnight = new DateTime().withTimeAtStartOfDay(); 
DateTime tomorrowAtMidnight = todayAtMidnight.plusDays(1); 
Query query = session.getNamedQuery("findUsersOrder") 
    .setTimestamp("todayAtMidnight", todayAtMidnight.toDate()) 
    .setTimestamp("tomorrowAtMidnight", tomorrowAtMidnight.toDate()); 
List<GroupTweetOrder> usersOrder= query.list(); 

和Java類,他表

@NamedQueries({ 
    @NamedQuery(name = "findUsersOrder", query = "FROM GroupTweetOrder WHERE gtoAddedDate >= :todayAtMidnight and gtoAddedDate < :tomorrowAtMidnight") 
}) 

但當我試圖運行這個HSQL我得到

Jun 23, 2014 5:13:11 PM com.sun.faces.context.AjaxExceptionHandlerImpl log 
SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=formcontract:iconOnly, Message=java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
Jun 23, 2014 5:13:11 PM com.sun.faces.context.AjaxExceptionHandlerImpl log 
SEVERE: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
javax.faces.event.AbortProcessingException: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
    at java.lang.String.charAt(String.java:658) 
    at org.hibernate.type.descriptor.java.CharacterTypeDescriptor.wrap(CharacterTypeDescriptor.java:79) 
    at org.hibernate.type.descriptor.java.CharacterTypeDescriptor.wrap(CharacterTypeDescriptor.java:33) 
    at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:66) 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:65) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:269) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:265) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238) 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:357) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2701) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1541) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1473) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1373) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:640) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:850) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) 
    at org.hibernate.loader.Loader.doList(Loader.java:2447) 
    at org.hibernate.loader.Loader.doList(Loader.java:2433) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2263) 
    at org.hibernate.loader.Loader.list(Loader.java:2258) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1161) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
    at com.ccc.spring.dao.GroupDistDAO.fetchTodayGroupOrder(GroupDistDAO.java:82) 
    at com.ccc.spring.service.GroupDistService.fetchTodayGroupOrder(GroupDistService.java:40) 
    at com.ccc.spring.service.GroupDistService$$FastClassBySpringCGLIB$$a552f952.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:711) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 
    at com.ccc.spring.service.GroupDistService$$EnhancerBySpringCGLIB$$647c04d.fetchTodayGroupOrder(<generated>) 
    at com.ccc.managedController.TweetDistributionManagedBean.sendGroupTweets(TweetDistributionManagedBean.java:175) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:264) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) 
    ... 31 more 
+0

問題來自GroupDistDAO第82行com.ccc.spring.dao.GroupDistDAO.fetchTodayGroupOrder(GroupDistDAO.java:82)。看起來像你輸入字符串的問題,我猜? – Jayasagar

+0

這是'列表 usersOrder = query.list();' – user3696143

回答

0

這個問題是不是來由於日期....這樣的問題,由於字符型字段表我使用char的數據類型爲這,所以我所做的更改char數據類型來TinyInt(1)現在這項工作很好

-2

根據Java SE 7文檔

Thrown by String methods to indicate that an index is either negative or greater than 
the size of the string. For some methods such as the charAt method, this exception 
also is thrown when the index is equal to the size of the string. 

請參閱more這裏。

+0

Agre但在這裏我沒有做任何你在這裏提到的 – user3696143

+0

我剛纔提到的異常原因你需要調試你的代碼。 –

+0

如果我能夠發現調試的問題,我從來沒有在這裏問過 – user3696143

4

Hibernate中的這個錯誤顯然發生在表中一個空的varchar列加載到char或Character字段中時。當我在Java中將字段定義爲char時,我在SQL中以「varchar(10)」的形式收到了相同的錯誤,並且表中的數據爲空字符串('')。只要表格數據是單個字符,它就可以正常工作。 (Running Hibernate 3.6.10)

有關失敗代碼的說明,請參閱https://forum.hibernate.org/viewtopic.php?f=1&t=1008581

相關問題