KotlinでORMLiteのdropTableができない件

データベースの抽象化ライブラリとして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のバグなんだろうか?


カテゴリー Java, Kotlin | タグ   | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です