Создание двух экземпляров объекта в одной транзакции завершается неудачно - PullRequest
0 голосов
/ 26 января 2019

Я новичок в разоблачении Котлина.У меня есть один DAO (сущность): User:

class User(id: EntityID<Int>) : IntEntity(id) {
     companion object : IntEntityClass<User>(Users)
}

object Users : IntIdTable() {
}

Теперь рассмотрим этот простой фрагмент кода:

transaction {
    val u1 = User.new(123) {}
    val u2 = User.new(1234) {}
}

Он выдает следующее исключение, по-видимому, при сбросе:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at org.jetbrains.exposed.sql.statements.InsertStatement.processResults(InsertStatement.kt:38)
    at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:103)
    at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:13)
    at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed(Statement.kt:59)
    at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:128)
    at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:122)
    at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:29)
    at org.jetbrains.exposed.sql.QueriesKt.batchInsert(Queries.kt:90)
    at org.jetbrains.exposed.sql.QueriesKt.batchInsert$default(Queries.kt:60)
    at org.jetbrains.exposed.dao.EntityCache.flushInserts$exposed(Entity.kt:432)
    at org.jetbrains.exposed.dao.EntityCache.flush(Entity.kt:386)
    at org.jetbrains.exposed.dao.EntityCache.flush(Entity.kt:378)
    at org.jetbrains.exposed.sql.Transaction.flushCache(Transaction.kt:85)
    at org.jetbrains.exposed.sql.Transaction.commit(Transaction.kt:62)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:105)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:75)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:58)
    at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:58)
    at ir.sls.mono.channel.table.TablesKt.main(Tables.kt:23)

Почему?Связана ли проблема с первичными ключами автоинкремента?

ОБНОВЛЕНИЕ:

Мое определение источника данных выглядит следующим образом:

hikari = HikariDataSource()
hikari.jdbcUrl = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"
hikari.maximumPoolSize = 2

Я изменил источник данных на MySql следующим образом:

hikari.jdbcUrl = "jdbc:mysql://localhost:3306/mono?user=root&password=root"

и код успешно выполнен? !!!!

...