Я пытаюсь перенести некоторые из моих классов Android Java POJO в Kotlin.Некоторые из этих классов используются в качестве объекта Room.
В соответствии с документацией для Определение данных с использованием объектов Room , методы получения и установки должны быть названы в соглашении JavaBean.
Если вы используете методы получения и установки, имейте в виду, что они основаны на соглашениях JavaBeans в Room.
С JavaBeans и логическим полем, это должно быть так в Java
@Entity
public class MyObject {
// other stuff
public MyObject() {
this.enabled = false;
}
public boolean isEnabled() { return this.enabled; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
}
Теперь в DAO на это можно ссылаться как таковое enabled = 1
@Query("select * from myobject where enabled = 1")
public List<MyObject> loadEnabledObjects();
В Котлине объект сводится к этому
@Entity
class MyObject {
// other stuff
var isEnabled: Boolean = false
}
Когдапри использовании DAO, как и раньше, возникает ошибка времени компиляции
ошибка: существует проблема с запросом: [SQLITE_ERROR] Ошибка SQL или отсутствует база данных (такой столбец не включен)
Похоже, что сущность Room ведет себя по-разному в моей версии Kotlin, и чтобы ссылаться на версию Kotlin с DAO, я должен изменить запрос, чтобы использовать isEnabled = 1
@Query("select * from myobject where isEnabled = 1")
public List<MyObject> loadEnabledObjects();
Официальный Kotlin Examples для Определение данных с использованием сущностей Room , и я хочу убедиться, что это правильное поведение, прежде чем я изменю все свои DAO.
Это правильно, или я что-то упустил сKotlin Entity такие аннотации или другая схема именования?