Проблема с MySQL для H2 DDL - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица, созданная в MySQL, которая инициирована, и она отлично работает.Но я определил базу данных в памяти с H2 для целей тестирования, которая использует тот же DDL для клонирования таблицы, с которой я могу протестировать свое приложение.

    CREATE TABLE `foo` (
    `fieldA`   BIGINT(20)    NOT NULL AUTO_INCREMENT,
    `fieldB`   BIGINT(20)    NOT NULL,
    `fieldC`   TIMESTAMP     NOT NULL,
    `fieldD`   TIMESTAMP     NOT NULL,
    `fieldE`   VARCHAR(40)   NOT NULL,
    `fieldF`   VARCHAR(40)   NOT NULL,
    `fieldG`   CHAR(3)       NOT NULL,
    PRIMARY KEY (`id`),
    KEY `fieldF` (`fieldF`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Но когда я пытаюсь инициализировать таблицу для своих тестовон выдает эту ошибку:

Причина: org.h2.jdbc.JdbcSQLException: неизвестный тип данных: "fieldF";

Это примерно так же полезно, как и ошибкаполучает.Я явно установил для поля F значение VARCHAR (40), так что мне еще нужно делать?

, если это поможет, я создаю таблицу в конфигурации Spring Boot здесь:

@Configuration
@EnableAutoConfiguration
@Import(ImportDataJobConfig.class)
public class TestJobConfiguration {

    @Bean
    public DataSource tlDataSource() {
        return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScript("sql/ve/init.sql")
                .build();
    }
}

Спасибо!

1 Ответ

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

Используя режим MySQL h2-1.4.196, ваш фрагмент кода выдает следующую ошибку:

Не найден столбец "ID" (...)

ВашDDL неверен в id и должен быть исправлен.

Чтобы исправить ошибку, с которой вы столкнулись, я бы предложил:

  1. Использовать режим MySQL в вашем JDBCURL вроде jdbc:h2:mem:;mode=mysql
  2. Кажется, ваш настоящий первичный ключ - fieldA, а не id.Пожалуйста, измените ваш SQL DDL соответственно:

    CREATE TABLE `foo` (
    `fieldA`   BIGINT(20)    NOT NULL AUTO_INCREMENT,
    `fieldB`   BIGINT(20)    NOT NULL,
    `fieldC`   TIMESTAMP     NOT NULL,
    `fieldD`   TIMESTAMP     NOT NULL,
    `fieldE`   VARCHAR(40)   NOT NULL,
    `fieldF`   VARCHAR(40)   NOT NULL,
    `fieldG`   CHAR(3)       NOT NULL,
    PRIMARY KEY (`fieldA`),
    KEY `fieldF` (`fieldF`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
...