Gå til innhold

Problem etter oppgradering av Spring og Hibernate


Anbefalte innlegg

Heisann folkens, noen med peiling på Spring Framework og Hibernate der ute?

 

Jeg har brukt Spring 1.2 og Hibernate 2.1 i en god stund men nå har jo Spring 2.0 og Hibernate 3 kommet så jeg ønsker å oppgradere. Har i den forbindelse støtt på en del problemer, de fleste har jeg løst men dette må jeg ha hjelp til.

 

System:

DB: PostgreSQL 8.2

Tomcat 5.5

Spring Framework 2.0.2

Hibernate 3.2.2

 

Jeg forsøker å hente ut noe salgsdata med følgende HQL:

select new no.gep.mediaport.util.statistics.StatsDataSales(si .sale.time, si.sale.clientLocation.country, si.sale.clientLocation.city, si.sale.currency, si.publication, si.product, si.sale.payMethod, si.amount) from no.gep.mediaport.bus.SaleItem as si where si.sale.time between :from and :to and si.sale.payMethod != :bar

 

Når denne kjøres så får jeg følgende Exception:

Klikk for å se/fjerne innholdet nedenfor
org.postgresql.util.PSQLException: ERROR: invalid reference to FROM-clause entry for table "saleitem0_"

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)

at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)

at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)

at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)

at org.hibernate.loader.Loader.doQuery(Loader.java:662)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)

at org.hibernate.loader.Loader.doList(Loader.java:2211)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)

at org.hibernate.loader.Loader.list(Loader.java:2090)

at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)

at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)

at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)

at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:870)

at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)

at org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(HibernateTemplate.java:861)

at no.gep.mediaport.dao.hibernate.MiscDAOImpl.getStatisticsDataSales(MiscDAOImpl.java:53)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)

at $Proxy273.getStatisticsDataSales(Unknown Source)

at no.gep.mediaport.util.statistics.StatisticsUtil.getStatisticsSales(StatisticsUtil.java:45)

at no.gep.mediaport.util.statistics.StatisticsUtil.getStatistics(StatisticsUtil.java:34)

at no.gep.mediaport.web.provider.StatsController.onSubmit(StatsController.java:85)

at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)

at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:250)

at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)

at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:820)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:755)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:360)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:173)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at no.gep.mediaport.filter.CommonFilter.doFilterInternal(CommonFilter.java:172)

at no.gep.mediaport.filter.MediaPortFilter.doFilter(MediaPortFilter.java:35)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at no.gep.mediaport.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:136)

at no.gep.mediaport.filter.MediaPortFilter.doFilter(MediaPortFilter.java:35)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at no.gep.mediaport.filter.SecurityFilter.doFilterInternal(SecurityFilter.java:274)

at no.gep.mediaport.filter.MediaPortFilter.doFilter(MediaPortFilter.java:35)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at no.gep.mediaport.filter.CompatFilter.doFilterInternal(CompatFilter.java:64)

at no.gep.mediaport.filter.MediaPortFilter.doFilter(MediaPortFilter.java:35)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:495)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

at java.lang.Thread.run(Thread.java:595)

 

Dette har altså funket fint før men ikke nå lenger.

 

Jeg forsøkte å kopiere spørringen og kjøre den manuelt med PostgreSQL men fikk samme resultat:

select

sale1_.sale_time as col_0_0_,

sale1_.country_code as col_1_0_,

sale1_.cl_city as col_2_0_,

sale1_.currency_code as col_3_0_,

saleitem0_.pub_id as col_4_0_,

saleitem0_.product_id as col_5_0_,

sale1_.sale_pay_method as col_6_0_,

saleitem0_.saleitem_amount as col_7_0_

from

saleitem saleitem0_,

sale sale1_

inner join country country3_

on sale1_.country_code=country3_.country_code

inner join currency currency6_

on sale1_.currency_code=currency6_.currency_code

inner join publication publicatio7_

on saleitem0_.pub_id=publicatio7_.id

inner join product product8_

on saleitem0_.product_id=product8_.product_id

where

saleitem0_.sale_id=sale1_.sale_id and

(sale1_.sale_time between '2007-02-01' and '2007-03-01') and

sale1_.sale_pay_method<>3

order by

sale1_.sale_time;

ERROR: invalid reference to FROM-clause entry for table "saleitem0_"

HINT: There is an entry for table "saleitem0_", but it cannot be referenced from this part of the query.

 

Men hvis jeg flytter saleitem joiningen slik (uthevet) så forsvinner problemet:

select

sale1_.sale_time as col_0_0_,

sale1_.country_code as col_1_0_,

sale1_.cl_city as col_2_0_,

sale1_.currency_code as col_3_0_,

saleitem0_.pub_id as col_4_0_,

saleitem0_.product_id as col_5_0_,

sale1_.sale_pay_method as col_6_0_,

saleitem0_.saleitem_amount as col_7_0_

from

saleitem saleitem0_

inner join publication publicatio7_

on saleitem0_.pub_id=publicatio7_.id

inner join product product8_

on saleitem0_.product_id=product8_.product_id,

sale sale1_

inner join country country3_

on sale1_.country_code=country3_.country_code

inner join currency currency6_

on sale1_.currency_code=currency6_.currency_code

where

saleitem0_.sale_id=sale1_.sale_id and

(sale1_.sale_time between '2007-02-01' and '2007-03-01') and

sale1_.sale_pay_method<>3

order by

sale1_.sale_time;

col_0_0_ | col_1_0_ | col_2_0_ | col_3_0_ | col_4_0_ | col_5_0_ | col_6_0_ | col_7_0_

-------------------------+----------+----------+----------+----------+----------+----------+----------

2007-02-03 18:18:12.194 | NO | OSLO | NOK | 214 | 1 | 0 | 15

2007-02-03 18:18:12.194 | NO | OSLO | NOK | 241 | 1 | 0 | 12

 

Det virker som det blir generert feil SQL til HQL'en jeg bruker. Men spørsmålet er da om dette er en bug i Hibernate? eller om jeg skulle endret noe som jeg ikke har gjort?

 

Hvis noen trenger flere opplysninger så skal jeg legge ut det...

 

På forhånd takk.

 

-bjornoss

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...