MyBatis and Kotlin
I wanted to do a little sample application in Kotlin. I’m getting tired of using JPA for all the things, so I decided to try out MyBatis. I had used MyBatis with great success years ago, before it got configuration by annotations. And it has a Spring Boot starter, so that makes things even easier. It really went well until I added a lastUpdated
field in my object. And then I got this error:
Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in com.objectpartners.demo.domain.Game matching [java.lang.Integer, java.lang.String, java.lang.Integer, java.sql.Timestamp]
After banging my head too long on it, the fix was pretty simple: Kotlin wasn’t able to coerce the java.sql.Timestamp
that the JDBC driver was handing back into a java.time.LocalDateTime
, so I just needed a constructor to help. Ironically the error tells you that but my Kotlin-fu is small. So I made this:
constructor( gameId: Int, name:String, bggId :Int , sqlTimestamp: Timestamp): this(gameId,name,bggId,sqlTimestamp.toLocalDateTime())
Overall, Kotlin and MyBatis work really well together. You can see my (very) simple demo on GitHub.