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.