简体   繁体   中英

(JPA/JPQL) how to query TIMESTAMPDIFF in now() function?

how to use this query? help me

problem that max(FUNCTION('TIMESTAMPDIFF', 'SECOND', startAt, endAt)))

startAt and endAt is LocalDateTime!

@Query(nativeQuery = false, value = """
  select new com.entity.repository.MyDto(category, max(FUNCTION('TIMESTAMPDIFF', 'SECOND', 
  sendStartAt, sendEndAt))) 
  from ReportHistory where eventAt >= :startAt
""")
fun findAllByStatistic(startAt: LocalDateTime): List<MyDto>?

data class MyDto(
        val category : String ?= null,
        val max : Long ?= null
)

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.stream.Stream com.entity.repository.MyDto.findAllByStatistic(java.time.LocalDateTime). at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery:java.93) at org.springframework.data.jpa.repository.query.SimpleJpaQuery.(SimpleJpaQuery:java.63) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory:java.76) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory:java.56) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy:java.139) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy:java.206) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy:8821324694 5888.79) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lookupQuery(RepositoryFactorySupport:java.566) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(RepositoryFactorySupport:java.559) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline:java.193) at java.util.Iterator.forEachRemaining(Iterator:java.116) at java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections:java.1049) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators:java.1801) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline:java.481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline:java.471) at java.util.stream .ReduceOps$ReduceOp.evaluateSequential(ReduceOps:java.708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline:java.234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline:java.499) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.mapMethodsToQuery(RepositoryFactorySupport:java.561) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$new$0(RepositoryFactorySupport:java.551) at java.util.Optional.map(Optional:java.215) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.(RepositoryFactorySupport:java.551) at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport:java.324) at org.springframework.data.reposito ry.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport:java.297) at org.springframework.data.util.Lazy.getNullable(Lazy:java.211) at org.springframework.data.util.Lazy.get(Lazy:java.94) at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport:java.300) at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean:java.119) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory:java.1804) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory:java.1741)..: 30 common frames omitted Caused by. java.lang:NullPointerException. null at org.hibernate.hql.internal.NameGenerator.generateColumnNames(NameGenerator:java.27) at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.generateColumnNames(SessionFactoryHelper:java.434) at org.hibernate.hql.internal.ast.tree.SelectClause.initializeColumnNames(SelectClause:java.270) at org.hibernate.hql.internal.ast.tree.SelectClause.finishInitialization(SelectClause:java.260) at org.hibernate.hql.internal.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause:java.255) at org.hibernate.hql.internal.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker:java.1018) at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker:java.786) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker:java.677) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker:java.313) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker:java.261) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl:java.271) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl:java.191) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl:java.143) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan:java.119) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan:java.80) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache:java.153) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract:java.595) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract:java.704) at org.hibernate.internal.AbstractSessionImpl. createQuery(AbstractSessionImpl:java.23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl:java.62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl:java.43) at java.lang.reflect.Method.invoke(Method:java.498) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator:java.350) at com.sun.proxy.$Proxy112.createQuery(Unknown Source) at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery:java.87)... 59 common frames omitted

There is not registerFunction('TIMESTAMPDIFF') in org.hibernate.dialect.MySQLDialect.

So you cant use it in jpa.

you can use unix_timestamp() instead.

(function('unix_timestamp', sendStartAt)-function('unix_timestamp', sendEndAt))/60

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM