2013-04-26 73 views
0

以下查询抛出异常。贷款类有一个User类型的变量,所以我将用户对象传递给查询。休眠查询抛出

String hqlQuery = "SELECT " + 
       "l.outDate, l.dueDate, l.noOfRenewals, " + 
       "c.authors, c.title, c.yearPublished, " + 
       "f.amount " + 
       "FROM Loan l " + 
       "JOIN CatalogueEntry c " + 
       "INNER JOIN Fine f " + 
       "WHERE l.user=" + user + 
       " AND l=f.loan" + 
       " AND l.catalogueEntry=c"; 

引发的异常是:

org.hibernate.QueryException: unexpected char: '@' [SELECT l.outDate, l.dueDate, l.noOfRenewals, c.authors, c.title, c.yearPublished, f.amount FROM com.csu.library.mvc.dto.Loan l JOIN CatalogueEntry c INNER JOIN Fine f WHERE [email protected] AND l=f.loan AND l.catalogueEntry=c] 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:223) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735) 
    at com.csu.library.mvc.dao.implementation.LoanDaoImpl.getLoansByUserForDisplay(LoanDaoImpl.java:58) 
    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:597) 
    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.$Proxy54.getLoansByUserForDisplay(Unknown Source) 
    at com.csu.library.mvc.service.impl.LoanServiceImpl.getCurrentLoansForDisplay(LoanServiceImpl.java:119) 
    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:597) 
    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.$Proxy59.getCurrentLoansForDisplay(Unknown Source) 
    at com.csu.library.mvc.controller.UserController.homepage(UserController.java:48) 
    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:597) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
    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:745) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:827) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:680) 

无论贷款和catalogueEntry是对象变量,而不仅仅是原始变量。

+0

你应该这样写:''WHERE l.user ='“+ user +”'“',,注意在哪里条件 – 2013-04-26 04:54:56

+0

@GrijeshChauhan当我添加更改后,会引发以下错误。 org.hibernate.hql.internal.ast.QuerySyntaxException:加入的路径! [SELECT l.outDate,l.dueDate,l.noOfRenewals,c.authors,c.title,c.yearPublished,f.amount FROM com.csu.library.mvc.dto.Loan l JOIN CatalogueEntry c INNER JOIN Fine f WHERE l.user='[email protected]'AND f.loan = l AND l.catalogueEntry = c] – 2013-04-26 05:01:13

+0

对不起然后不知道:( – 2013-04-26 05:18:41

回答

2

您需要重新构建HQL到这样的事情: -

"WHERE l.user.id=" + user.getId() 

其中idUser类的主键。

在查询中给出user的原因是在实际查询中附加其toString()表示形式。

更新: -JOIN,你需要提及ON条款了。

JOIN CatalogueEntry c 
ON l.someField = c.someField 

这同样适用于在JOINFine了。做出这些改变,看看会发生什么!

+0

抛出以下错误:org.hibernate.hql.internal.ast.QuerySyntaxException:加入的路径![SELECT l.outDate,l.dueDate,l.noOfRenewals,c.authors,c.title,c.yearPublished,f.amount FROM com.csu.library.mvc.dto.Loan l JOIN CatalogueEntry c INNER JOIN Fine f WHERE l。 user.userID = 2 AND f.loan = l AND l.catalogueEntry = c] – 2013-04-26 05:10:26

+0

检查我的更新! – SudoRahul 2013-04-26 05:19:00

+0

没问题....但我有一份贷款罚款清单。我应该在查询中映射它吗? l.fines.someField = f.someField ??我相信那是不正确的。 – 2013-04-26 08:48:58