При использовании метода Exposed "createMissingTablesAndColumns" я получаю исключение NoSuchElementException - PullRequest
0 голосов
/ 12 марта 2020

Я использую 0.22.1 Exposed libs (core / dao / jdb c), и когда я использую "SchemaUtils.createMissingTablesAndColumns", мои таблицы создаются, но я получаю исключение.

Если я Перезапустите сервер с новым столбцом, я получаю то же исключение, и обновление не выполняется

См. трассировку стека:

Exception in thread "main" java.util.NoSuchElementException: Collection contains no element matching the predicate.
    at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableConstraints$$inlined$associateWith$lambda$1.invoke(JdbcDatabaseMetadataImpl.kt:170)
    at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableConstraints$$inlined$associateWith$lambda$1.invoke(JdbcDatabaseMetadataImpl.kt:13)
    at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImplKt.iterate(JdbcDatabaseMetadataImpl.kt:164)
    at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.tableConstraints(JdbcDatabaseMetadataImpl.kt:123)
    at org.jetbrains.exposed.sql.vendors.VendorDialect$fillConstraintCacheForTables$1.invoke(Default.kt:639)
    at org.jetbrains.exposed.sql.vendors.VendorDialect$fillConstraintCacheForTables$1.invoke(Default.kt:560)
    at org.jetbrains.exposed.sql.statements.jdbc.JdbcConnectionImpl.metadata(JdbcConnectionImpl.kt:47)
    at org.jetbrains.exposed.sql.Database.metadata$exposed_core(Database.kt:31)
    at org.jetbrains.exposed.sql.vendors.VendorDialect.fillConstraintCacheForTables(Default.kt:639)
    at org.jetbrains.exposed.sql.vendors.VendorDialect.columnConstraints(Default.kt:617)
    at org.jetbrains.exposed.sql.SchemaUtils.addMissingColumnsStatements(SchemaUtils.kt:145)
    at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns(SchemaUtils.kt:241)
    at org.jetbrains.exposed.sql.SchemaUtils.createMissingTablesAndColumns$default(SchemaUtils.kt:229)
    at repository.database.DatabaseRepository$createTableAndColumn$1.invoke(DatabaseRepository.kt:36)
    at repository.database.DatabaseRepository$createTableAndColumn$1.invoke(DatabaseRepository.kt:17)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:156)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$2.invoke(ThreadLocalTransactionManager.kt:197)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:205)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:196)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:134)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:205)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:106)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:104)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:103)
    at repository.database.DatabaseRepository.createTableAndColumn(DatabaseRepository.kt:35)
    at repository.database.DatabaseRepository.createAndUpdateDB(DatabaseRepository.kt:31)
    at domain.database.PrepareDatabaseUseCase.performNow(PrepareDatabaseUseCase.kt:18)
    at controller.MainController.<init>(MainController.kt:18)
    at controller.MainControllerKt.main(MainController.kt:10)

Мои таблицы просты (только для проверки):

import org.jetbrains.exposed.dao.id.IntIdTable

object UserTable: IntIdTable()

и

import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.Column

object SpaceTable: IntIdTable() {
    val userIdColumn: Column<EntityID<Int>> = reference("userId", UserTable.id)
}

Когда я пробую метод "SchemaUtils.create", все в порядке, но, конечно, когда я перезапускаю сервер с некоторыми новостными столбцами, столбцы не отображаются. t создал

У вас есть идея, как это исправить? Что я делаю не так? Спасибо

...