LoginSignup
1
1

More than 5 years have passed since last update.

OrmaとKotlinでデフォルトコンストラクタに@Column でないプロパティを入れると@setter constructor parameters must satisfy all the @column fields が発生する

Posted at

症状

一部の項目をデーターベースで管理したくないオブジェクトがあって、コンストラクターでColumnを指定しないフィールドを設定するとビルドに失敗した。

@Table
class OrmaTodo(
        @Setter("id") @PrimaryKey var id: Long,
        @Setter("foo") @Column var foo: String,
        var bar:Int? = null
)

上記のコードをビルドしようとすると、以下のメッセージが出て失敗する。
barプロパティは Setterを指定していないのだけれど。。。

Error:(51, 2) error: [OrmaProcessor] The @Setter constructor parameters must satisfy all the @Column fields

環境

Ormaのバージョンは4.2.5

    kapt 'com.github.gfx.android.orma:orma-processor:4.2.5'
    compile 'com.github.gfx.android.orma:orma:4.2.5'

対策

プライマリーコンストラクターでなければ大丈夫

@Table
class OrmaTodo(
        @Setter("id") @PrimaryKey var id: Long,
        @Setter("foo") @Column var foo: String
) {
    constructor(id:Long, foo:String, bar:Int?) : this(id, foo) {
        this.bar = bar

    }
    var bar: Int? = null
}

コンストラクターで指定する必要がないプロパティであれば、コンストラクタから単に外すだけでもOK

@Table
class OrmaTodo(
        @Setter("id") @PrimaryKey var id: Long,
        @Setter("foo") @Column var foo: String
) {
    var bar: Int? = null
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1