2013-03-28 2 views
1

postgres jdbc 드라이버 버전 9.1-901.jdbc3과 관련된 이상한 문제를 만났습니다. 여기에 내가 96 개 결과를 반환 내가하고 4 개 널 객체를 반환합니다 (즉, 내가 제한을 통과하고 얼마나 많은 식별자입니다) (100)의 최대 절전 모드 고정했다 목록 크기를 추측하고 SQL 문을 실행하면 내 DAOHibernate 4와 Postgres 9 : Criteria.list() 예외가 발생했습니다

@Override 
    public List<Products> getProductsListByIds(List<String> ids, Integer storeId) { 
    Criteria criteria = getSession().createCriteria(Products.class) 
    .add(Restrictions.eq("storeId", storeId)) 
    .add(Restrictions.in("productId", ids)) 
    .add(Restrictions.isNotEmpty("createdAt")) 
    .add(Restrictions.isNotEmpty("updatedAt")) 
    .add(Restrictions.isNotNull("id")) 
    return criteria.list(); 
    } 

입니다 명부.

org.hibernate.exception.DataException: Bad value for type timestamp : 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:134) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:108) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) 
    at com.sun.proxy.$Proxy44.getTimestamp(Unknown Source) 
    at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$2.doExtract(TimestampTypeDescriptor.java:67) 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:65) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247) 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:332) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2873) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1668) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1600) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1500) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:712) 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:940) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:910) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) 
    at org.hibernate.loader.Loader.doList(Loader.java:2516) 
    at org.hibernate.loader.Loader.doList(Loader.java:2502) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332) 
    at org.hibernate.loader.Loader.list(Loader.java:2327) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1621) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374) 
    at com.insparq.insparqsvc.dao.impl.StoresDAOImpl.getProductsListByIds(StoresDAOImpl.java:115) 
    at com.insparq.insparqsvc.service.impl.StoreServiceImpl.getProductsListByIds(StoreServiceImpl.java:112) 
    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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy38.getProductsListByIds(Unknown Source) 
    at com.insparq.jobserver.service.impl.ScheduledJobServiceImpl.normalizeProducts(ScheduledJobServiceImpl.java:446) 
    at com.insparq.jobserver.service.impl.ScheduledJobServiceImpl.parseCSV(ScheduledJobServiceImpl.java:415) 
    at com.insparq.jobserver.service.impl.ScheduledJobServiceImpl.generateProductsCSV(ScheduledJobServiceImpl.java:214) 
    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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) 
    at com.sun.proxy.$Proxy39.generateProductsCSV(Unknown Source) 
    at com.insparq.jobserver.test.ScheduledJobTest.processJob(ScheduledJobTest.java:173) 
    at com.insparq.jobserver.test.ScheduledJobTest.test(ScheduledJobTest.java:111) 
    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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    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.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:104) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70) 
Caused by: org.postgresql.util.PSQLException: Bad value for type timestamp : 
    at org.postgresql.jdbc2.TimestampUtils.loadCalendar(TimestampUtils.java:246) 
    at org.postgresql.jdbc2.TimestampUtils.toTimestamp(TimestampUtils.java:321) 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getTimestamp(AbstractJdbc2ResultSet.java:437) 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getTimestamp(AbstractJdbc2ResultSet.java:2446) 
    at org.apache.commons.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:229) 
    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.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:104) 
    ... 82 more 
Caused by: java.lang.NumberFormatException: Timestamp has neither date nor time 
    at org.postgresql.jdbc2.TimestampUtils.loadCalendar(TimestampUtils.java:243) 
    ... 91 more 

만이 얻을 결과와 널 (null)와 요소의 나머지 부분을 기입하지로드 최대 절전 모드로 말할 수있는 방법이 있나요 : 그것은 다음과 같은 예외와 타임 스탬프에 null을지도 할 때 결과 포스트 그레스 JDBC 드라이버로 실패 ?

답변

0

Hibernate는 고정리스트 크기를 가지지 않고 단지 쿼리를 실행한다. 행 값을 타임 스탬프로 변환 할 수 없습니다. 행에 날짜 유형이있을 수 있습니다. 데이터베이스에 null 제한을 설정하지 않은 상태에서 행에 0 값 (00/00/00 ...)이 포함되어있을 때 비슷한 오류가 발생했습니다.

+0

로 이동하는 것이 좋습니다 에, 그러나 그것이 운전자와 같은 문제인 것처럼 보인다. 버전 9.2로 업데이트되었지만 여전히 오류가 발생합니다. 내가 간단한 선택을 실행하면 데이터를 잘 반환합니다. 그래서 그것을 위해 null이 아닌 column을 null로 변경 한 다음 created_at를 null로 설정했습니다. 모든 것이 잘되었습니다. 그런 다음 to_timestamp 함수를 사용하여 created_at를 업데이트했습니다. 그것은 다시 실패하기 시작했습니다. 나는 완전히 여기에서 길을 잃는다. – Mike

0

isNotEmptycreatedAt과 같은 타임 스탬프 필드의 유효한 제한이라고 생각하지 않습니다.

설명서에 따라 컬렉션 속성에만 적용됩니다.

비어 있지 않은 당신이 여기 isNotNull를 사용하는 가정되는 것으로 콜렉션 가치 속성을 제한합니다.

public List<Products> getProductsListByIds(List<String> ids, Integer storeId) { 
    Criteria criteria = getSession().createCriteria(Products.class) 
     .add(Restrictions.eq("storeId", storeId)) 
     .add(Restrictions.in("productId", ids)) 
     .add(Restrictions.isNotNull("createdAt")) 
     .add(Restrictions.isNotNull("updatedAt")) 
     .add(Restrictions.isNotNull("id")) 
    return criteria.list(); 
} 

또 다른 측면 노트 : 포스트 그레스 드라이버 9.1.901 일부 시리즈의 성능 문제로 보인다는 내가 무슨 일이 일어나고 있는지 모르겠습니다 최신 버전 9.1.902 또는 9.1.903

관련 문제