I am switching from SQL Server to MySQL. I had no troubles with the first but now creating a new entity throws a:
11:04:38.923 [pool-3-thread-1] ERROR ktor.application - Unhandled: POST - /api/newCamera
java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:85)
at com.mysql.cj.jdbc.ClientPreparedStatement.setObject(ClientPreparedStatement.java:1701)
at org.jetbrains.exposed.sql.IColumnType$DefaultImpls.setParameter(ColumnType.kt:56)
at org.jetbrains.exposed.sql.ColumnType.setParameter(ColumnType.kt:60)
at org.jetbrains.exposed.sql.statements.StatementKt.fillParameters(Statement.kt:116)
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed(Statement.kt:51)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:131)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:125)
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:451)
at org.jetbrains.exposed.dao.EntityID.getValue(Entity.kt:23)
at org.jetbrains.exposed.dao.Entity.setValue(Entity.kt:244)
at it.synesthesia.rivelat.mainserver.database.daos.Camera.setNode(Camera.kt)
at it.synesthesia.rivelat.mainserver.server.ExtensionsKt$buildRouteForNewCameras$1$1$1.invoke(Extensions.kt:29)
at it.synesthesia.rivelat.mainserver.server.ExtensionsKt$buildRouteForNewCameras$1$1$1.invoke(Extensions.kt)
at org.jetbrains.exposed.dao.EntityClass.new(Entity.kt:672)
at org.jetbrains.exposed.dao.EntityClass.new(Entity.kt:649)
at it.synesthesia.rivelat.mainserver.server.ExtensionsKt$buildRouteForNewCameras$1$1.invoke(Extensions.kt:25)
at it.synesthesia.rivelat.mainserver.server.ExtensionsKt$buildRouteForNewCameras$1$1.invoke(Extensions.kt)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:104)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:75)
...
Caused by: com.mysql.cj.exceptions.WrongArgumentException: Invalid argument value: java.io.NotSerializableException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.AbstractQueryBindings.setSerializableObject(AbstractQueryBindings.java:598)
at com.mysql.cj.AbstractQueryBindings.setObject(AbstractQueryBindings.java:263)
at com.mysql.cj.jdbc.ClientPreparedStatement.setObject(ClientPreparedStatement.java:1699)
... 61 common frames omitted
Caused by: java.io.NotSerializableException: org.jetbrains.exposed.dao.EntityID
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.mysql.cj.AbstractQueryBindings.setSerializableObject(AbstractQueryBindings.java:587)
... 63 common frames omitted
The code is pretty basic and uses only DAOs:
defaultTransaction {
Camera.new {
createdAt = DateTime(data.ts)
node =
Node.findOneOrNull { NodeTable.name eq data.nodeId }
?: Node.new { // <-- it errors here
name = data.nodeId
code = data.nodeId
createdAt = DateTime()
application =
Application.findOneOrNull { ApplicationTable.name eq "DEV" }
?: Application.new {
name = "DEV"
}
}
code = data.data["id"].toString().toDouble().toInt().toString()
name = data.data.getValue("customName") as String
configurationData = null
}
}
fun <T> defaultTransaction(function: Transaction.() -> T)
= transaction(Settings.remoteDatabase, function)
fun <ID : Comparable<ID>, T : Entity<ID>> EntityClass<ID, T>.findOneOrNull(op: SqlExpressionBuilder.() -> Op<Boolean>) =
find(op).singleOrNull()
I think it may be related to this but I'm not sure.
The MySQL DB is an AWS RDS instance using MySQL 5.6; my application is erroring with mysql:mysql-connector-java:8.0.15/5.1.46 drivers, JDK 1.8 and 11, macOs.
I am switching from SQL Server to MySQL. I had no troubles with the first but now creating a new entity throws a:
The code is pretty basic and uses only DAOs:
I think it may be related to this but I'm not sure.
The MySQL DB is an AWS RDS instance using MySQL 5.6; my application is erroring with
mysql:mysql-connector-java:8.0.15/5.1.46
drivers, JDK 1.8 and 11, macOs.