org.hibernate.exception.SQLGrammarException:无法准备语句

问题描述 投票:5回答:3

我已经创建了两个实体,我试图在加载后填充数据,将其显示为下拉列表。

我收到了错误

org.hibernate.exception.SQLGrammarException:无法准备语句

必须位于下拉列表中的Group实体是:

@Entity
@Table(name="GROUP")
public class Group implements Serializable,Lifecycle{

    /**
     * 
     */
    private static final long serialVersionUID = 5551707547269388327L;
    @Id
    @Column(name="ID")
    @GeneratedValue
    private int id;
    @Column(name="E_NAME")
    private String eName;
    @Column(name="A_NAME")
    private String aName;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String geteName() {
        return eName;
    }
    public void seteName(String eName) {
        this.eName = eName;
    }
    public String getaName() {
        return aName;
    }
    public void setaName(String aName) {
        this.aName = aName;
    }





    @Override
    public boolean onDelete(Session arg0) throws CallbackException {
        // TODO Auto-generated method stub
        return false;
    }
    @Override
    public void onLoad(Session session, Serializable arg1) {
        // TODO Auto-generated method stub
        Group adminGroup =new Group();
        Group sectionAdminGroup =new Group();
        Group userGroup =new Group();



        adminGroup.seteName("Admin");
        sectionAdminGroup.seteName("Section Admin");
        userGroup.seteName("User");

        adminGroup.setaName("مسشرف عام");
        sectionAdminGroup.setaName("مشرف قطاع");
        userGroup.setaName("مستخدم");

        session.save(adminGroup);
        session.save(sectionAdminGroup);
        session.save(userGroup);
    }
    @Override
    public boolean onSave(Session arg0) throws CallbackException {
        // TODO Auto-generated method stub
        return false;
    }
    @Override
    public boolean onUpdate(Session arg0) throws CallbackException {
        // TODO Auto-generated method stub
        return false;
    }

}

堆栈跟踪是:

引起:

org.hibernate.exception.SQLGrammarException:在org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)无法准备语句在org.hibernate.engine上的org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:196) .gdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160)org.hibernate.loader.prepareQueryStatement(Loader.java:1884)atg.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861)at at Org.hibernate.loader.Loader.Linader.doQueryAndInitializeNonLazyCollections(Loader.java:354)中的org.hibernate.loader.Loader.doQuery(Loader.java:909)中的org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)在org.hi Berg.hibader.Loader.doList(Loader.java:2551)org.hibernate.loader.doList.doList(Loader.java:2537)org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)org位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1678)的org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)的.hibernate.loader.Loader.list(Loader.java:2362) )org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)org.gaca.gms.dao.GenericDAOImpl.getAll(GenericDAOImpl.java:56)at org.gaca.gms.services.GenericServiceImpl.getAllObjects( GenericServiceImpl.java:61)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)是java位于org.springframework.aop.fram的org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)的.lang.reflect.Method.invoke(Method.java:483)在org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:98)的org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)中的ework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) )在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)在org.springframework.aop.framework.ReflectiveMethodInvocation。在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)进行(ReflectiveMethodInvocation.java:179)在com.sun.proxy。在org.gaca.gms.controllers $ Proxy39.getAllObjects(来源不明) .UsersController.listUsers(UsersController.java:43)位于org.springfra的org.gaca.gms.controllers.UsersController $$ FastClassBySpringCGLIB $$ 29260f80.invoke() meg.csplib.proxy.MethodProxy.invoke(MethodProxy.java:204)atg.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:157)在org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:98)在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)在org.springframework。 transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)在org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy。 java:644)org.gaca.gms.controllers.UsersController $$ EnhancerBySpringCGLIB $$ de07b585.listUsers()at sun.reflect.NativeMethodAccessorImpl.inv oke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java: 483)在org.springframework.web的org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web上的org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)中的.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle中的.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)(AbstractHandlerMethodAdapter。的java:83)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)在org.springframework.web.servlet .FrameworkServlet.processRequest(FrameworkServlet.java:961)在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)在javax.servlet.http.HttpServlet.service(HttpServlet.java:707)在有机springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)在javax.servlet.http.HttpServlet.service(HttpServlet.java:820)在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 487)org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)atg.mortbay.jetty.servlet.SessionHandler .handle(SessionHandler.java:181)位于org.mortbay.jetty.webapp.WebAp的org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) pgtext.handle(WebAppContext.java:405)org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)at org .mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)org.mortbay.jetty.Server.handle(Server.java:324)org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) )在org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:829)在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser。 java:211)org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)atg.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)org.mortbay.thread.QueuedThreadPool $ PoolThread .run(QueuedThreadPool.java:488)引起:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“SELECT THIS_.ID AS ID1_0_0_,THIS_.A_NAME AS A_NAME2_0_0 _,THIS_.E_NAME AS E_NAME3_0_0_ FROM GROUP [*] THIS_“;预期的“标识符”; SQL语句:选择this_.ID为ID1_0_0_,this_.A_NAME为A_NAME2_0_0_,this_.E_NAME为来自GROUP this_ [42001-178]的E_NAME3_0_0_,位于org.h2的org.h2.message.DbException.getJdbcSQLException(DbException.java:344)位于org的org.h2.command.Parser.readTableFilter(Parser.java:1185)org.h2.command.Parser.readIdentifierWithSchema(Parser.java:3024)的.message.DbException.getSyntaxError(DbException.java:204)。 h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1859)org.h2.command.ParsSelectSimple(Parser.java:1968)org.h2.command.Parser.parseSelectSub(Parser.java:1853)org .h2.command.Parser.parseSelectUnion(Parser.java:1674)org.h2.command.Parser.parseSelect(Parser.java:1662)org.h2.command.Parser.parsePrepared(Parser.java:434)at at org.h2.command.Parser.parse(Parser.java:306)org.h2.command.Parser.parse(Parser.java:278)org.h2.command.Parser.prepareCommand(Parser.java:243)在org.h2.engine.Session.prepareLocal(Session.java:442)org.h2.engine.Session.prepareCo mmand(Session.java:384)org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)org.h2.jdbc.JdbcConnection。 prepareStatement(JdbcConnection.java:276)在org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281)在org.apache.commons.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313)在组织.hibernate.engine.jdbc.internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:162)org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)... 73更多

引起:

org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“SELECT THIS_.ID AS ID1_0_0_,THIS_.A_NAME AS A_NAME2_0_0_,THIS_.E_NAME AS E_NAME3_0_0_ FROM GROUP [*] THIS_”;预期的“标识符”; SQL语句:选择this_.ID为ID1_0_0_,this_.A_NAME为A_NAME2_0_0_,this_.E_NAME为来自GROUP this_ [42001-178]的E_NAME3_0_0_,位于org.h2的org.h2.message.DbException.getJdbcSQLException(DbException.java:344)位于org的org.h2.command.Parser.readTableFilter(Parser.java:1185)org.h2.command.Parser.readIdentifierWithSchema(Parser.java:3024)的.message.DbException.getSyntaxError(DbException.java:204)。 h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1859)org.h2.command.ParsSelectSimple(Parser.java:1968)org.h2.command.Parser.parseSelectSub(Parser.java:1853)org .h2.command.Parser.parseSelectUnion(Parser.java:1674)org.h2.command.Parser.parseSelect(Parser.java:1662)org.h2.command.Parser.parsePrepared(Parser.java:434)at at org.h2.command.Parser.parse(Parser.java:306)org.h2.command.Parser.parse(Parser.java:278)org.h2.command.Parser.prepareCommand(Parser.java:243)在org.h2.engine.Session.prepareLocal(Session.java:442)org.h2.engine.Session.prepareCo mmand(Session.java:384)在org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)在org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)在org.h2.jdbc.JdbcConnection。 prepareStatement(JdbcConnection.java:276)在org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281)在org.apache.commons.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313)在组织.hibernate.engine.jdbc.internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:162)在org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)在org.hibernate.engine。 jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160)在org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1884)在org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861)在组织.hibernate.loader.Loader.executeQueryStatement( Loader.java:1838)在org.hibernate.loader.Loader.doQuery(Loader.java:909)在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)在org.hibernate.loader.Loader.doList (Loader.java:2551)org.hibernate.loader.loList(Loader.java:2537)org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)org.hibernate.loader.Loader上的org.hibernate.loader.Loader.doList(Loader.java:2537)。列表(Loader.java:2362)位于org.hibernate.internal的org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)org.hibernate.internal.SessionImpl.list(SessionImpl.java:1678) .CriteriaImpl.list(CriteriaImpl.java:380)在org.gaca.gms.dao.GenericDAOImpl.getAll(GenericDAOImpl.java:56)在org.gaca.gms.services.GenericServiceImpl.getAllObjects(GenericServiceImpl.java:61)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java的org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java)中org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)的.lang.reflect.Method.invoke(Method.java:483) :190)在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)在org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:98)在org.springframework.transaction.interceptor位于org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)的org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)中的.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)位于org.gaca的com.sun.proxy。$ Proxy39.getAllObjects(未知来源)。 gms.controllers.UsersController.listUsers(UsersController.java:43)在org.gaca.gms.controllers.UsersController $$ FastClassBySpringCGLIB $$ 29260f80.invoke()在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java :204)org.springframework.aop.frame.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)org.springframework.transaction。 org.springframework.transaction.Transaction事件中的orceptor.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)中的interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:98)(TransactionInterceptor.java:95) )org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedIntercep tor.intercept(CglibAopProxy.java:644)在org.gaca.gms.controllers.UsersController $$ EnhancerBySpringCGLIB $$ de07b585.listUsers()在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:483)在org.springframework.web.method.support。位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle的org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)中的InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) ServletInvocableHandlerMethod.java:104)位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAda的org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) pter.handleInternal(RequestMappingHandlerAdapter.java:689)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 938)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)在org.springframework.web.servlet.FrameworkServlet .doGet(FrameworkServlet.java:852)在javax.servlet.http.HttpServlet.service(HttpServlet.java:707)在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)在的javax.servlet。 http.HttpServlet.service(HttpServlet.java:820)在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)在org.mortbay的org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)。 jetty.servlet.SessionHandler.handle(SessionHandler.java:181)在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 405)在org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)在org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)在org.mortbay.jetty.handler.HandlerWrapper .handle(HandlerWrapper.java:152)在org.mortbay.jetty.Server.handle(Server.java:324)在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)在org.mortbay.jetty。的HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:829)在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)在org.mortbay位于org.mortbay.thread.QueuedThreadPool的org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)的.jetty.HttpConnection.handle(HttpConnection.java:380) PoolThread.run(QueuedThreadPool.java:488)

这是我的Spring控制器:

@SuppressWarnings("unchecked")
        @RequestMapping(method=RequestMethod.GET)
          public String listUsers(Map<String, Object> map) {

            map.put("user", new User());
            map.put("usersList", usersService.getAllObjects(User.class));
            map.put("groupsList", usersService.getAllObjects(Group.class));
            return "index";
        }

这是我的JSP页面:

<tr>
                  <td>groups</td>
                  <td><form:select path="selectedGroup">
                  <form:options items="${groupsList}"/> 
                  </form:select></td>
                  </tr>

我是新来的。有人可以帮忙吗?

java hibernate jpa
3个回答
14
投票

您使用的表名GROUP是h2数据库的保留关键字。使用ADMIN_GROUP这样的名称重命名表。

这是the h2 documentation的摘录:

关键词/保留字

有一个关键字列表不能用作标识符(表名,列名等),除非它们被引用(用双引号括起来)。目前的清单是:

CROSS, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DISTINCT, EXCEPT, EXISTS, FALSE, FOR, FROM, FULL, GROUP, HAVING, INNER, INTERSECT, IS, JOIN, LIKE, LIMIT, MINUS, NATURAL, NOT, NULL, ON, ORDER, PRIMARY, ROWNUM, SELECT, SYSDATE, SYSTIME, SYSTIMESTAMP, TODAY, TRUE, UNION, UNIQUE, WHERE

此列表中的某些单词是关键字,因为它们是可以在没有'()'的情况下使用的函数,例如CURRENT_TIMESTAMP


1
投票

大约40分钟后,我发现不应该使用用户和currentUser

//this cause error
@Column()
private String user; 

这导致:could not prepare statement; SQL [insert into table_progress (id, created, user, progress, updated, xdip) values (default, ?, ?, ?, ?, ?)]

//changed to this and works    
@Column()
private String userP;

0
投票

我使用desc进行描述,desc和asc也是用于升序和降序的保留字。

© www.soinside.com 2019 - 2024. All rights reserved.