我有一个非常基本的schema.sql文件:
理想情况下,我只想让表格自动生成。我已在application.properties
中停用了自动ddl设置。但是,我收到了错误:
引起:org.springframework.beans.factory.BeanCreationException:创建名称为' dataSource'的bean时出错在类路径资源中定义[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]:bean的初始化失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称' org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker创建bean时出错':init方法的调用失败;嵌套异常是org.springframework.jdbc.datasource.init.ScriptStatementFailedException:无法执行URL [file:/Users/schachte/Documents/Habicus-Core/build/resources/main/schema.sql]的SQL脚本语句#1: CREATE TABLE
goal_metrics
(;嵌套异常是org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误" CREATE TABLE"" GOAL_METRICS""([* ]&#34 ;;期望"标识符&#34 ;; 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;
答案 0 :(得分:0)
我遇到了同样的问题,只是意识到当您使用保留字时,h2db不喜欢它。请勿使用保留字来命名数据库,表或字段,例如:
...等等...
由于我使用的是Spring JPA存储库,因此我通过重命名域对象(并确保所有名称都不匹配保留的h2db名称)解决了该问题。
大多数人常犯的一个常见错误是在H2DB上使用MySql语法。也不要犯该错误。 H2数据库具有自己的语法。