2016-04-25 1 views
2

ich vor kurzem von MySQL zu SQL Server migriert, und ich hatte den folgenden Fehler:Frühling Daten JPA findAll mit SQL Server

The column "STATUT_NDF_TB.sortId" Not valid in the ORDER BY clause because she is NOT contained in an aggregate function OR GROUP BY clause 

Hier ist meine Funktion:

@Override 
public List<Ndf> rechercherNdfs(Demande<Ndf> demande) { 
    final List<Specification<Ndf>> specificationList = SpecificationsHelper.chooseSpecifications(NdfSpecification.class, demande); 
    final Specifications<Ndf> specifications = SpecificationsHelper.buildWhereClause(specificationList); 
    final Pageable page = SpecificationsHelper.buildPage(demande); 
    final Page<Ndf> resultat = ndfRepository.findAll(Specifications.where(specifications), page); 
    return resultat.getContent(); 
} 

ich diese Funktion aufrufen wie die folgenden:

Demande<NdfDTO> demande = new Demande<NdfDTO>(); 
demande.addVariable("statutNoEqual", "AN"); 
demande.setConverterId(EnumMapper.MAPPING_NDF_INFO.toString()); 
ndfServicesSilo.rechercherNdfs(demande); 

Und die statutNoEqual:

public static Specification<Ndf> statutNoEqual(final String codeStatut) { 
    return new Specification<Ndf>() { 
     @Override 
     public Predicate toPredicate(Root<Ndf> ndfRoot, CriteriaQuery<?> query, CriteriaBuilder cb) { 
      query.orderBy(cb.asc(ndfRoot.get(Ndf_.refEtat).get(StatutNdf_.sortId))); 
      return cb.notEqual(ndfRoot.get(Ndf_.refEtat).get(StatutNdf_.code), codeStatut); 
     } 
    }; 
} 

Ich benutze die Order By Klausel Daten zu bekommen, aber es die Zählung mit der gleichen Spezifikation aufrufen (bei Bestellung durch), so dass es einen Fehler zurück, hier ist der Fehler:

13:06:24.316 [http-nio-8080-exec-6] DEBUG org.hibernate.SQL - 
    select 
     count(ndf0_.ID) as col_0_0_ 
    from 
     NDF_TB ndf0_ cross 
    join 
     STATUT_NDF_TB statutndf1_ 
    where 
     ndf0_.REF_ETAT=statutndf1_.ID 
     and statutndf1_.CODE<>? 
     and ndf0_.REF_RESS=2406 
    order by 
     statutndf1_.sortId asc 
13:06:24.316 [http-nio-8080-exec-6] TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [AN] 
13:06:24.316 [http-nio-8080-exec-6] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 8127, SQLState: S0001 
13:06:24.316 [http-nio-8080-exec-6] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - La colonne "STATUT_NDF_TB.sortId" n'est pas valide dans la clause ORDER BY parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY. 
13:06:24.394 [http-nio-8080-exec-6] ERROR f.p.s.b.e.CustomExceptionHandler - javax.faces.FacesException: fr.percall.si.base.exception.ServiceExecutionException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
    at fr.percall.si.view.util.BasicLazyDataModel.load(BasicLazyDataModel.java:71) 
    at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:841) 
    at org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:95) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:83) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:674) 
    at javax.faces.component.UIData.encodeEnd(UIData.java:1721) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:554) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550) 
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1891) 
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:313) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) 
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:67) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: fr.percall.si.base.exception.ServiceExecutionException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
    at fr.percall.si.services.ndf.impl.NdfServicesSiloImpl.rechercherNdfs(NdfServicesSiloImpl.java:297) 
    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:497) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy213.rechercherNdfs(Unknown Source) 
    at fr.percall.si.view.ndf.spec.AbstractGestionNdfController$1.getResults(AbstractGestionNdfController.java:226) 
    at fr.percall.si.view.util.BasicLazyDataModel.load(BasicLazyDataModel.java:65) 
    ... 71 more 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: La colonne "STATUT_NDF_TB.sortId" n'est pas valide dans la clause ORDER BY parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:281) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2066) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:910) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) 
    at org.hibernate.loader.Loader.doList(Loader.java:2554) 
    at org.hibernate.loader.Loader.doList(Loader.java:2540) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) 
    at org.hibernate.loader.Loader.list(Loader.java:2365) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) 
    at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67) 
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.executeCountQuery(SimpleJpaRepository.java:615) 
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.readPage(SimpleJpaRepository.java:495) 
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:394) 
    at sun.reflect.GeneratedMethodAccessor451.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:414) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:399) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:371) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:122) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy207.findAll(Unknown Source) 
    at fr.percall.si.services.ndf.impl.NdfServiceImpl.rechercherNdfs(NdfServiceImpl.java:56) 
    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:497) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy208.rechercherNdfs(Unknown Source) 
    at fr.percall.si.services.ndf.impl.NdfServicesSiloImpl.rechercherNdfs(NdfServicesSiloImpl.java:275) 
    ... 86 more 

Antwort

0

Ihre SELECT-Anweisung ist keine gültige SQL Server-Anweisung. Wenn Sie eine Zählung aller Zeilen in Ihren zwei verknüpften Tabellen wünschen, entfernen Sie die Klausel order by. Wenn Sie die Anzahl der Zeilen pro statutndf1_.sortId zählen möchten, müssen Sie vor der order by-Klausel eine group by-Klausel einfügen. Wenn Sie die statutndf1_.sortId in Ihre Ausgabe einschließen möchten, müssen Sie sie in die Auswahlliste aufnehmen.

Siehe folgende Beispiele:

set nocount on 
DECLARE @TABLE TABLE(ID INT,NO INT) 
INSERT INTO @TABLE VALUES (111, 6), (222, 7), (333 , 9), (111 , 8), (333 , 4), (222 , 3),(111 , 7), 
(222 , 5), 
(333 , 2) 

select count(*) as Obs 
from @TABLE 
/* 
Result 
Obs 
----------- 
9 
*/ 

select count(*) as Obs 
from @TABLE 
group by id 
order by id 
/* 
Result 
Obs 
----------- 
3 
3 
3 
*/ 

select id,count(*) as Obs 
from @TABLE 
group by id 
order by id 
/* 
Result 
id   Obs 
----------- ----------- 
111   3 
222   3 
333   3 
*/ 
+0

Ja, ich weiß, dass meine SQL-Abfrage nicht bestätigt ist, aber der findAll, die die COUNT Abfrage mit den Spezifikationen auszuführen, die ich auf die SELECT-Abfrage übergeben, hier in dieser Zeile 'ndfRepository .findAll (Spezifikationen.where (Spezifikationen), Seite); ' –

Verwandte Themen