2014-01-17 21 views
2

我在Jetty服務器上部署了webapp並連接到位於HSQLDB服務器上的HSQLDB數據庫。HSQL序列的語法問題:`NEXTVAL`而不是`NEXT VALUE`

ERROR org.hibernate.util.JDBCExceptionReporter意外標記:當我試圖創建一個實體我得到這個錯誤NEXTVAL在語句[/ *動態原生SQL查詢*/SELECT NEXTVAL( 'campagne_sequence')]

我初始化序列如下:

CREATE SEQUENCE PUBLIC.CAMPAGNE_SEQUENCE START WITH 1 INCREMENT BY 1 

在我的web應用程序,我設置了Hibernate的方言與org.hibernate.dialect.HSQLDialect

我檢查了創建序列的語法,它是正確的。我使用的是hsqldb-1.8.0.10,我也檢查過下一個版本的語法是否發生了變化,但是沒有。

我知道在PostgreSQL中正確的語法是NEXT VALUE而不是NEXTVAL,但我不知道如何解決它。誰能幫我這個?由於

編輯:

在測試環境中,一切工作正常。我所有的測試都運行良好。但是在開發環境中,當我嘗試創建Campagne時,出現錯誤。有一個測試可以創建一個,它也可以工作。所以它應該適用於hsqldb-1.8.0.10版本。

我試圖在數據庫URL後添加字符串;sql.syntax_pgs=true,沒有工作。

編輯:

這是一個完整的堆棧跟蹤我得到:

2014-01-22 10:24:22,813 [RMI TCP Connection(6)-127.0.0.1] WARN org.hibernate.util.JDBCExceptionReporter SQL Error: -11, SQLState: 37000 
2014-01-22 10:24:22,820 [RMI TCP Connection(6)-127.0.0.1] ERROR org.hibernate.util.JDBCExceptionReporter Unexpected token: NEXTVAL in statement [/* dynamic native SQL query */ SELECT nextval('campagne_sequence')] 
2014-01-22 10:24:22,827 [RMI TCP Connection(6)-127.0.0.1] WARN org.springframework.remoting.support.RemoteInvocationTraceInterceptor Processing of RmiServiceExporter remote call resulted in fatal exception: com.square.core.service.interfaces.CampagneService.creerCampagne 
org.hibernate.exception.SQLGrammarException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.loader.Loader.doList(Loader.java:2536) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 
    at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:859) 
    at com.square.core.dao.implementations.CampagneDaoImplementation.rechercherSequence(CampagneDaoImplementation.java:169) 
    at com.square.core.util.sequence.CampagneSequenceUtilImpl.rechercherSequence(CampagneSequenceUtilImpl.java:32) 
    at com.square.core.service.implementations.CampagneServiceImplementation.creerCampagne(CampagneServiceImplementation.java:156) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy263.creerCampagne(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:66) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy264.creerCampagne(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy263.creerCampagne(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205) 
    at org.springframework.security.context.rmi.ContextPropagatingRemoteInvocation.invoke(ContextPropagatingRemoteInvocation.java:103) 
    at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78) 
    at org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72) 
    at org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) 
    at sun.rmi.transport.Transport$1.run(Transport.java:177) 
    at sun.rmi.transport.Transport$1.run(Transport.java:174) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.sql.SQLException: Unexpected token: NEXTVAL in statement [/* dynamic native SQL query */ SELECT nextval('campagne_sequence')] 
    at org.hsqldb.jdbc.Util.throwError(Unknown Source) 
    at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source) 
    at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) 
    at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:171) 
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:278) 
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534) 
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452) 
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:801) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    ... 68 more 

回答

3

基於查詢的評論/* dynamic native SQL query */查詢不受方言,而是由本地SQL查詢生成的,所以固定的查詢可以解決這個問題。

查看項目代碼以查看是否有任何使用nextval調用序列的本機查詢。

+0

「HSQLDialect」類位於jar'hibernate-core-3.6。 0.Final.jar'。這兩種方法與您所說的完全相同。在評論部分,它說'這個版本支持HSQLDB版本1.8和更高',我使用'hsqldb-1.8.0.10'。該類也爲此版本設置:'int hsqldbVersion = 18;'。 – Soma

+0

確定,以確認語法錯誤的查詢未被方言寫入。對查詢/ *動態原生SQL查詢* /的評論意味着此查詢是一個本地查詢,它直接在應用程序代碼中創建,而不是框架,例如使用entityManager.createNativeQuery()。如果在代碼中搜索nextval不會返回任何內容,您可以發佈完整的堆棧跟蹤嗎?因爲如果它不是寫這個查詢的應用程序,那麼它就涉及到一些其他的框架/庫,並且stacktrace會告訴我們哪一個。 –

+0

嗯,這是相當長的..我不能全部加入 – Soma

1

你可以用HSQLDB版本1.8.0使用以後,如果你創建一個表ONE_ROW_TABLE,準確地插入一個排入它。

SELECT NEXT VALUE FOR campagne_sequence FROM ONE_ROW_TABLE 

但你應該移動到HSQLDB版本2.3.x版本,讓你以下選項:

VALUES NEXT VALUE FOR campagne_sequence 

或使用相同的方法,PostgreSQL的,這個字符串添加到數據庫URL的末尾;sql.syntax_pgs=true在HSQLDB中啓用PostgreSQL語法兼容模式。

SELECT nextval('campagne_sequence') 
+0

......沒有工作。我將這個字符串添加到我的server.properties中,用於Hsqldb Server和我的webapp。 我寧願不升級我的版本的Hsqldb,這兩個版本之間有修改,作爲數據源bean的名稱(1.8:jdbcDataSource; 2.3:JDBCDataSource),但我不知道它們全部。但如果這是唯一的方式,我會做 – Soma

+0

任何工作。這個東西,它在測試環境下工作正常,在內存中有一個數據集和一個數據庫,但是在帶有已存檔數據庫的開發環境中沒有。 我檢查了項目和父項目或插件中的所有依賴關係,我只有hslqdb-1.8.0.10或hsqldb-1.8.0.7 – Soma