Kotlin Exposed не совершает транзакции

Следуя примеру, представленному в Exposed, я не могу прочитать созданные таблицы / данные за пределами созданной транзакции. Я использую базу данных h2-in-memory.

Исключение составляет:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "CITIES" not found; SQL statement: 

Я добавил вызов для фиксации, но это не помогает. Если я прочитаю данные в транзакции, создающей данные, как в примере по ссылке на github, она работает нормально. Вот упрощенная версия:

 fun main(args: Array<String>) { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver") transaction { create(Cities) City.new { name = "St. Petersburg" } println("Cities: ${City.all().joinToString { it.name }}") //I have added this commit here commit() } //I want to read the data outside the transaction, but it does not work transaction { println("Cities: ${City.all().joinToString { it.name }}") } } 

Как я могу сохранить данные?

Добавление logger.addLogger(StdOutSqlLogger) дает следующий результат:

 SQL: CREATE TABLE IF NOT EXISTS CITIES (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(50) NOT NULL) SQL: INSERT INTO CITIES (NAME) VALUES ('St. Petersburg') SQL: SELECT CITIES.ID, CITIES.NAME FROM CITIES 

    Он совершает транзакцию. Проблема в том, что когда база данных в памяти закрыта, она удаляется и база данных в памяти закрывается при следующих обстоятельствах:

    По умолчанию H2 закрывает базу данных, когда последнее соединение закрыто

    Источник

    Вот диаграмма, поэтому легче понять, что происходит шаг за шагом (когда база данных закрыта, она полностью удалена)

    диаграмма

    Самое простое решение – просто использовать фактическую файловую базу данных вместо памяти.

    Изменение базы данных из памяти в Database.connect("jdbc:h2:~/test", driver = "org.h2.Driver") проблему.

    Похоже, вы отошли от памяти H2, чтобы решить вашу проблему. Имейте в виду, что корень вашей первоначальной проблемы, вероятно, был вызван тем, что H2 нужно поддерживать ваши таблицы для жизни JVM:

    JDBC: h2: MEM: тест; DB_CLOSE_DELAY = -1

    далее поясняется здесь: H2 in-memory database. Таблица не найдена