H2 в базе данных памяти путается между именем столбца и значением, которое я хочу использовать

Контекст: попытка протестировать загрузочное приложение Spring, попытка инициализировать данные через файл data.sql в каталоге src/test/resources/

У меня есть следующее в памяти db:

spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;

У меня также есть следующая таблица SQL:

CREATE TABLE `roles` (
                       `id` bigint(20) NOT NULL AUTO_INCREMENT,
                       `name` varchar(60) DEFAULT NULL,
                       PRIMARY KEY (`id`),
                       UNIQUE KEY `UK_nb4h0p6txrmfc0xbrd1kglp9t` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

и вот мой оператор вставки (в data.sql)

INSERT INTO roles(name) VALUES ("ROLE_USER");

Когда я запускаю свои весенние модульные тесты, я получаю эту ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #2 of URL [file:/Users/me/IdeaProjects/proj/out/test/resources/data.sql]: INSERT INTO roles(name) VALUES ("ROLE_USER"); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "ROLE_USER" not found; SQL statement:
INSERT INTO roles(name) VALUES ("ROLE_USER") [42122-198]

Для меня все выглядит правильно... Я использую простой оператор вставки в таблицу, которая определенно существует... и я вставляю значение, которое хорошо соответствует определению столбца. Но по какой-то причине он выдает эту ошибку, говоря, что столбец «ROLE_USER» не существует, и я не уверен, почему.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 315
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ах! Я нашел решение - оказывается, что оператору SQL нужны одинарные кавычки для значений... поэтому правильный способ будет таким:

INSERT INTO roles(name) VALUES ('ROLE_USER');

вместо :

INSERT INTO roles(name) VALUES ("ROLE_USER");

Другие вопросы по теме