2013-07-29 8 views
9

H2用のSQLスクリプトをインポートしようとしています。このスクリプトはspring-batchによって提供され、ジョブのメタデータを格納するために使用されます。ここでH2 SQL文法例外

org.hibernate.tool.hbm2ddl.ImportScriptException: Error during statement execution (file: 'org/springframework/batch/core/schema-h2.sql'): CREATE TABLE BATCH_JOB_INSTANCE (
    ....  
    Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE BATCH_JOB_INSTANCE ("; expected "identifier"; SQL statement: 
CREATE TABLE BATCH_JOB_INSTANCE ([42001-171] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2-1.3.171.jar:1.3.171] 
    at org.h2.message.DbException.get(DbException.java:169) ~[h2-1.3.171.jar:1.3.171] 
    at org.h2.message.DbException.getSyntaxError(DbException.java:194) ~[h2-1.3.171.jar:1.3.171] 

がある:私はH2コンソールに直接このスクリプトを実行すると、私は構文エラーを持っていないが、私は初期化フェーズでインポートするにHibernate/JPAで同じスクリプトを参照し、私はこの例外を得ました

jpaProperties.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); 
    jpaProperties.setProperty("hibernate.dialect", H2Dialect.class.getName()); 
    jpaProperties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); 
    jpaProperties.setProperty("hibernate.hbm2ddl.import_files", 
     "org/springframework/batch/core/schema-drop-h2.sql,org/springframework/batch/core/schema-h2.sql"); 

任意のアイデア私はこの問題を解決することができますどのように私は、SQLファイルをインポートするためにhbm2ddlを使用していますhttps://code.google.com/p/joshlong-examples/source/browse/trunk/batch/src/main/resources/sql/schema-h2.sql?r=2

:スクリプトは、私が実行しようとしていますか?

答えて

10

それぞれの作成ステートメントを1行に書き込もうとします。

import.sqlの文区切り文字は改行です。変更したい場合は、Hibernate> 4.1を使う必要があります。そこには、私はようやく私の質問への答えを見つけたhibernate.hbm2ddl.import_files_sql_extractor

+0

あなたの答えをありがとう。スクリプトをH2で直接実行すると問題はありません。しかし、私はファイルをインポートするために休止状態を使用しているとき、私はこのエラーがあります。 – Dimitri

+0

これは休止状態の「問題」です。 – Ralph

+0

デリミタはサーバ内ではないクライアントで処理されるため、エディタでは動作します(Hibernateでは動作しません)。したがって、各クライアントは異なる方法でそれを処理できます。 – Ralph

2

MultipleLinesSqlCommandExtractorを実装し、それを指定することができます。ラルフの答えに基づいて、この問題を修正するために、休止状態のための次のプロパティを追加します。

jpaProperties.setProperty("hibernate.hbm2ddl.import_files_sql_extractor", "org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor"); 

またはXMLでの:

<property key="hibernate.hbm2ddl.import_files_sql_extractor" value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" /> 

このクラスMultipleLinesSqlCommandExtractorは、インタフェースImportSqlCommandExtractorの実装です。これは、HibernateでSchemaExportを実行するときに呼び出されるインターフェイスです。デフォルトの実装はSingleLineSqlCommandExtractorです。不明な理由で構文エラーが返されます。単線抽出器を複数行抽出器に置き換えることにより、発行が解決されました。