2013-07-29 34 views
9

H2 için bir sql betiği almaya çalışıyorum. Bu betik, bahar toplu işiyle sağlanır ve iş meta verilerini depolamak için kullanılır. İşteH2 SQL Dilbilgisi İstisnası

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] 

: Ben H2 konsolunda doğrudan bu senaryoyu yürütmek, ben hiçbir sözdizimi hatalarını var ama başlatma aşamasında ithal edilecek Hazırda bekleme/JPA aynı senaryoyu başvurulan, bu istisna var

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"); 

herhangi bir fikir ben bu sorunu nasıl çözebiliriz: Ben sql dosyasını almak için hbm2ddl kullanıyorum https://code.google.com/p/joshlong-examples/source/browse/trunk/batch/src/main/resources/sql/schema-h2.sql?r=2

: komut ben yürütmeye çalışıyorum?

cevap

10

Oluşturma ifadelerinizin her birini bir satırda yazmayı deneyin.

import.sql'deki ifade sınırlayıcısı yeni satırdır. Bunu değiştirmek isterseniz, Hazırda Beklet> 4.1'i kullanmanız gerekir. Orada bir MultipleLinesSqlCommandExtractor uygulamak ve hibernate.hbm2ddl.import_files_sql_extractor

+0

Cevabınız için teşekkür ederiz. Komut dosyalarını doğrudan H2'de çalıştırdığımda, hiç sorunum yok. Ancak dosyaları almak için hazırda bekletme özelliğini kullandığımda, bu hatayı aldım. – Dimitri

+0

Hazırda bekleyen bir "Sorun" dır. – Ralph

+0

Düzenleyicinizle birlikte çalışır (fakat Hazırda Bekletme ile değil) çünkü ayırıcı sunucuda olmayan istemcide ele alınır. Böylece her müşteri bunu farklı bir şekilde ele alabilir. – Ralph

2

Sonunda benim sorunun cevabını buldum bunu belirtebilirsiniz. Ralph'ın cevap dayanarak, bu sorunu gidermek için, hazırda aşağıdaki özelliğini ekleyin:

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

Veya XML:

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

Bu sınıf MultipleLinesSqlCommandExtractor arayüzünün ImportSqlCommandExtractor bir uygulamasıdır. Bu, Hibernate ile SchemaExport yapılırken arabirim olarak adlandırılır. Varsayılan uygulama SingleLineSqlCommandExtractor şeklindedir ve bilinmeyen bir nedenle bir sözdizimi hatası verir. Tek hat çıkarıcıyı çoklu hat çıkarıcı ile değiştirmek, isssue çözüldü.