H2 Grammaire SQL Exception
Je suis en train d'importer un script sql pour H2. Ce script est fourni par le ressort-lot et est utilisé pour stocker les emplois de métadonnées. Lorsque j'exécute ce script directement dans le H2 de la console, je n'ai pas d'erreurs de syntaxe, mais j'ai référencé le même script dans Hibernate/JPA, à être importés lors de la phase d'initialisation, j'ai eu cette exception :
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]
Voici le script que je suis en train de l'exécuter : https://code.google.com/p/joshlong-examples/source/browse/trunk/batch/src/main/resources/sql/schema-h2.sql?r=2
Je suis en utilisant hbm2ddl pour importer le fichier sql :
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");
Une idée de comment je peux résoudre ce problème?
OriginalL'auteur Dimitri | 2013-07-29
Vous devez vous connecter pour publier un commentaire.
Essayer d'écrire chacun de vos créer des instructions sur une seule ligne.
La déclaration de délimiteur dans l'importation.sql est un retour à la ligne. Si vous souhaitez la modifier, vous devez utiliser Hibernate > 4.1. De là, vous pouvez mettre en Œuvre un
MultipleLinesSqlCommandExtractor
et le spécifier parhibernate.hbm2ddl.import_files_sql_extractor
C'est une veille prolongée "Problème".
Il fonctionne avec votre Éditeur de texte (mais pas avec Hibernate) parce que le délimiteur est gérée dans le client n'est pas dans le serveur. De sorte que chaque client peut gérer d'une manière différente.
Ah ok, merci pour les conseils. J'ai enfin trouvé la solution.
OriginalL'auteur Ralph
J'ai enfin trouvé la réponse à ma question. Basé sur Ralph réponse, pour corriger ce problème, ajoutez la propriété suivante pour la mise en veille prolongée :
Ou en XML :
Cette classe
MultipleLinesSqlCommandExtractor
est une implémentation de l'interfaceImportSqlCommandExtractor
. Cette interface est appelée lors SchemaExport avec mise en veille prolongée. L'implémentation par défaut estSingleLineSqlCommandExtractor
et pour une raison inconnue renvoie une erreur de syntaxe. Remplacement de la ligne unique de l'extracteur avec la plusieurs ligne extracteur résolu à l'isssue.OriginalL'auteur Dimitri