Ошибка синтаксиса SQL при загрузке файла schema.sql в Spring Boot - PullRequest
0 голосов
/ 29 апреля 2018

У меня довольно простой файл schema.sql:

В идеале, я просто хочу, чтобы таблицы генерировались автоматически. Я отключил автоматическую настройку ddl в моем application.properties. Однако я получаю ошибки:

Ошибка:

Причина: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'dataSource', определенным в ресурсе пути к классу [org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]: инициализация компонента не удалось; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker ': сбой вызова метода init; вложенное исключение: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: не удалось выполнить инструкцию SQL-сценария №1 URL [file: /Users/schachte/Documents/Habicus-Core/build/resources/main/schema.sql]: CREATE TABLE goal_metrics (; вложенным исключением является org.h2.jdbc.JdbcSQLException: синтаксическая ошибка в операторе SQL "CREATE TABLE" "GOAL_METRICS" "([*]"; ожидаемый "идентификатор"; оператор SQL:

schema.sql

CREATE TABLE `goal_metrics` (
  `goal_metrics_id` int(11) NOT NULL,
  `goal_complete` varchar(45) DEFAULT NULL,
  `goal_in_progress` varchar(45) DEFAULT NULL,
  `money_made_on_goal` varchar(45) DEFAULT NULL,
  `time_until_due_date` decimal(10,0) DEFAULT NULL,
  `goals_goal_id` int(11) NOT NULL,
  PRIMARY KEY (`goal_metrics_id`,`goals_goal_id`),
  KEY `fk_goal_metrics_goals1_idx` (`goals_goal_id`),
  CONSTRAINT `fk_goal_metrics_goals1` FOREIGN KEY (`goals_goal_id`) REFERENCES `goals` (`goal_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `metrics` (
  `goalsInProgress` int(11) NOT NULL,
  PRIMARY KEY (`goalsInProgress`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `users` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `password` varchar(45) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `dob` datetime DEFAULT NULL,
  `gender` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `email_UNIQUE` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1 Ответ

0 голосов
/ 20 июня 2018

Я столкнулся с той же проблемой, только чтобы понять, что h2db не нравится, когда вы используете зарезервированные слова . Не называйте свою БД, таблицы или даже поля зарезервированными словами, такими как:

  • * Группа 1006 *
  • Память
  • Выберите
  • Авторизация

... и т.д ...

Я решил это, переименовав свои доменные объекты (и убедился, что ни одно из имен не соответствует зарезервированным именам h2db ), поскольку я использую Spring JPA, репозитории.

Распространенная ошибка, которую допускают большинство людей, заключается в использовании синтаксиса MySql на H2DB. Воздержитесь от этой ошибки тоже. База данных H2 имеет собственный синтаксис.

...