データベースの抽象化ライブラリとしてORMLiteを使ってみてるんですが、KotlinでORMLiteを使ってTableUtils.dropTableをしようとしたらエラーでコンパイルが通りませんでした。
問題のソースはこれ。16行目がなぜかエラーになって通りません。
object DatabaseHelper {
val connectionSource by Delegates.lazy {
val databaseUrl = "jdbc:h2:~/test"
JdbcConnectionSource(databaseUrl)
};
{
setUpDatabase(connectionSource)
}
private fun setUpDatabase(connectionSource: ConnectionSource) {
TableUtils.createTableIfNotExists(connectionSource, javaClass<User>())
}
fun truncate() {
TableUtils.dropTable(connectionSource, javaClass<User>(), true)
TableUtils.createTable(connectionSource, javaClass<User>())
}
fun getUserDao() : Dao<User, Int> = DaoManager.createDao(connectionSource, javaClass<User>())!!
fun close() = connectionSource.close()
}
エラーメッセージは、
Type inference failed: Not enough information to infer parameter ID in
fun
dropTable
(
connectionSource: com.j256.ormlite.support.ConnectionSource?,
dataClass: java.lang.Class?,
ignoreErrors: jet.Boolean
)
: jet.Int
Please specify it explicitly.
と出ていて、パラメータ IDの情報がないよということっぽいのだけれど、これどこで指定するのん?という話で、よくわかりません。。。(Java詳しくないので)
仕方がないので、Javaでtruncateメソッドを実装しました。
public class Truncate {
public static void truncate(ConnectionSource connectionSource) throws SQLException {
TableUtils.dropTable(connectionSource, User.class, true);
TableUtils.createTable(connectionSource, User.class);
}
}
で、これをKotlinで呼び出すと。
fun truncate() = Truncate.truncate(connectionSource)
うーむ、これなら動くけど、なんだか釈然としない。
Kotlinのバグなんだろうか?
