2016-07-19 5 views
0

Ich versuche, wie unten@SqlResultSetMapping thows seltsame Ausnahme mit Frühlings-JPA

@SqlResultSetMapping(name = "SCHOOLWITHOWNER", entities = 
{ 

    @EntityResult(entityClass = SchoolDto.class, fields = 
    { 
     @FieldResult(name = "id", column = "c_sm_npk_id"), 
     @FieldResult(name = "name", column = "c_sm_vnm_name") 
    }), 
    @EntityResult(entityClass = UserDto.class, fields = 
    { 
     @FieldResult(name = "id", column = "c_um_npk_id"), // 
     @FieldResult(name = "firstName", column = "c_um_vnm_first_name"), // 
     @FieldResult(name = "lastName", column = "c_um_vnm_last_name") 
    }) 
}) 

mit @SqlResultSetMapping Ergebnis zu erhalten unter dem Dateicodeausschnitt aus DaoImpl ist.

getEntityManager().createNativeQuery 
    ("SELECT c_sm_npk_id, 
      c_sm_vnm_name, 
      c_um_npk_id, 
      c_um_vnm_first_name , 
      c_um_vnm_last_name 
     from t_school_master AS school 
     join t_user_master AS owner 
      ON school.owner_c_um_npk_id = owner.c_um_npk_id", 
    "SCHOOLWITHOWNER").getResultList(); 

, wenn ich oben Methode ausführen ich unter seltsamen Störung erhalte:

SEVERE: Servlet.service() for servlet life threw exception 
org.postgresql.util.PSQLException: The column name c_sm_vnm2_15_0_ was not found in this ResultSet. 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn(AbstractJdbc2ResultSet.java:2727) 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getString(AbstractJdbc2ResultSet.java:2567) 
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getString(HikariProxyResultSet.java) 
    at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:74) 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1695) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1627) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1514) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:725) 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:952) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:920) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) 
    at org.hibernate.loader.Loader.doList(Loader.java:2553) 
    at org.hibernate.loader.Loader.doList(Loader.java:2539) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) 
    at org.hibernate.loader.Loader.list(Loader.java:2364) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:353) 
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1873) 
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311) 
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141) 
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) 
    at com.vinayak.education.dao.impl.SchoolDaoImpl.getAllSchoolsWithAdvanceSearch(SchoolDaoImpl.java:39) 
    at com.vinayak.education.service.impl.SchoolServiceImpl.getAllSchoolsWithAdvanceSearch(SchoolServiceImpl.java:29) 
    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:98) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:266) 
    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.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy115.getAllSchoolsWithAdvanceSearch(Unknown Source) 
    at com.vinayak.education.rest.SchoolController.getAllSchoolsWithAdvanceSearch(SchoolController.java:112) 
    at com.vinayak.education.rest.SchoolController$$FastClassBySpringCGLIB$$aea67306.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) 
    at com.vinayak.education.rest.SchoolController$$EnhancerBySpringCGLIB$$bbb7f604.getAllSchoolsWithAdvanceSearch(<generated>) 
    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.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:174) 
    at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:237) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    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.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 com.vinayak.life.security.AuthenticationTokenProcessingFilter.doFilter(AuthenticationTokenProcessingFilter.java:97) 
    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.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:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:745) 

Ich kann aus nicht verstehen, wo c_sm_vnm2_15_0_ kommt?

Ich habe show_sql = true und

unter Abfrage ausführen winter
SELECT 
     c_sm_npk_id, 
     c_sm_vnm_name, 
     c_um_npk_id, 
     c_um_vnm_first_name , 
     c_um_vnm_last_name 
    from 
     t_school_master AS school 
    join 
     t_user_master AS owner 
      ON school.owner_c_um_npk_id = owner.c_um_npk_id 

, die in SQL gut funktioniert.

Bitte lassen Sie mich wissen, was ich falsch mache.

Dank

+0

Was sind die Eigenschaften von SchoolDto und UserDto? werden alle durch resultsetMapping zugeordnet? – Apostolos

+0

gibt es viele Eigenschaften in SchoolDto und UserDto, nur einige von ihnen sind durch die resultSetMapping zugeordnet –

+0

Ich denke, nicht 100% sicher, dass Sie alle Eigenschaften im Mapping angeben müssen. Nur mit '@ ConstructorResult' und' @ ColumnResult' erhalten Sie die spezifischen Eigenschaften, die Sie zuordnen müssen. – Apostolos

Antwort

1

Bitte lesen this

javax.persistence Annotation EntityResult

Ziel:

Used to map the SELECT clause of a SQL query to an entity result. If this annotation is used, the SQL statement should select all of the columns that are mapped to the entity object.

Wenn Sie nur bestimmte Eigenschaften zuordnen möchten, verwenden Sie bitte @ConstructorResult und @ColumnResult

+0

Ich ändern @constructorResult und erhalten Fehler wie "Konnte nicht geeigneten Konstruktor auf der Klasse gefunden: com.vinayak.education.dto.SchoolDto", brauche ich Konstruktor in POJO? –

+0

Ja, Sie müssen den äquivalenten Konstruktor definieren. Sie können so viele Kombinationen haben, wie Sie möchten, aber da Sie bestimmte Spalten benötigen, benötigen Sie einen äquivalenten Konstruktor mit diesen Feldern als Parameter mit derselben Reihenfolge. – Apostolos

Verwandte Themen