Я новичок в разоблачении Котлина.У меня есть один 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"
и код успешно выполнен? !!!!